Skip to content
This repository has been archived by the owner on Mar 7, 2024. It is now read-only.

Commit

Permalink
fix(web): web端函数组件缺少ref forward (#1124)
Browse files Browse the repository at this point in the history
  • Loading branch information
newset committed Jul 2, 2020
1 parent c91a0de commit 990cde6
Show file tree
Hide file tree
Showing 10 changed files with 41 additions and 49 deletions.
14 changes: 5 additions & 9 deletions packages/remax-one/src/hostComponents/Button/index.web.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,11 @@ import useWebTouch from '../useWebTouch';

export type ButtonProps = ButtonWebProps;

const Button: React.FC<ButtonWebProps> = props => {
const Button: React.ForwardRefRenderFunction<any, ButtonWebProps> = (props, ref) => {
const {
hoverClassName,
hoverStartTime,
hoverStayTime,
hoverStartTime = 400,
hoverStayTime = 50,
className,
onTouchStart,
onTouchMove,
Expand All @@ -36,16 +36,12 @@ const Button: React.FC<ButtonWebProps> = props => {
onTouchStart={handleTouchStart}
onTouchMove={handleTouchMove}
onTouchEnd={handleTouchEnd}
ref={ref}
onTouchCancel={handleTouchCancel}
className={clsx('remax-button', className, { [hoverClassName || '']: hovered })}
onClick={onTap}
/>
);
};

Button.defaultProps = {
hoverStayTime: 400,
hoverStartTime: 50,
};

export default Button;
export default React.forwardRef(Button);
6 changes: 4 additions & 2 deletions packages/remax-one/src/hostComponents/Form/index.web.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ import { filterProps } from '../../utils/isPlatformSpecifyProp';

export type FormProps = FormWebProps;

const Form: React.FC<FormWebProps> = props => <form {...filterProps(props)} />;
const Form: React.ForwardRefRenderFunction<any, FormWebProps> = (props, ref) => (
<form {...filterProps(props)} ref={ref} />
);

export default Form;
export default React.forwardRef(Form);
15 changes: 7 additions & 8 deletions packages/remax-one/src/hostComponents/Image/index.web.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@ import clsx from 'clsx';

export type ImageProps = ImageWebProps;

const Image: React.FC<ImageWebProps> = props => {
const { className, src, style, mode, onTap, onLoad, onError, ...restProps } = filterProps<ImageWebProps>(props);
const Image: React.ForwardRefRenderFunction<any, ImageWebProps> = (props, ref) => {
const { className, src, style, mode = 'scaleToFill', onTap, onLoad, onError, ...restProps } = filterProps<
ImageWebProps
>(props);
const isWidthFixMode = mode === 'widthFix';

return (
Expand All @@ -16,14 +18,15 @@ const Image: React.FC<ImageWebProps> = props => {
onClick={onTap}
className={clsx('remax-image', className)}
style={{
...modeStyle[mode || 'scaleToFill'],
...modeStyle[mode],
backgroundImage: `url(${src})`,
backgroundRepeat: `no-repeat`,
...style,
}}
>
<img
src={src}
ref={ref}
style={{
visibility: 'hidden',
width: isWidthFixMode ? '100%' : undefined,
Expand All @@ -35,8 +38,4 @@ const Image: React.FC<ImageWebProps> = props => {
</div>
);
};
export default Image;

Image.defaultProps = {
mode: 'scaleToFill',
};
export default React.forwardRef(Image);
9 changes: 3 additions & 6 deletions packages/remax-one/src/hostComponents/Input/index.web.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import clsx from 'clsx';

export type InputProps = InputWebProps;

const Input: React.FC<InputWebProps> = props => {
const Input: React.ForwardRefRenderFunction<any, InputWebProps> = (props, ref) => {
const { password, type, onConfirm, onKeyPress, placeholderStyle, className, ...restProps } = filterProps(props);
const [placeholderStyleClassName] = useWebPlaceholderStyle(placeholderStyle);

Expand All @@ -25,14 +25,11 @@ const Input: React.FC<InputWebProps> = props => {
return (
<input
{...restProps}
ref={ref}
type={inputType}
onKeyPress={handleKeyPress}
className={clsx('remax-input', className, placeholderStyleClassName)}
/>
);
};
export default Input;

Input.defaultProps = {
onChange: () => void 0,
};
export default React.forwardRef(Input);
4 changes: 3 additions & 1 deletion packages/remax-one/src/hostComponents/Label/index.web.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ import { filterProps } from '../../utils/isPlatformSpecifyProp';

export type { LabelProps };

const Label: React.FC<LabelProps> = props => <label {...filterProps(props)} />;
const Label: React.ForwardRefRenderFunction<any, LabelProps> = (props, ref) => (
<label {...filterProps(props)} ref={ref} />
);

export default Label;
4 changes: 2 additions & 2 deletions packages/remax-one/src/hostComponents/Navigator/index.web.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { filterProps } from '../../utils/isPlatformSpecifyProp';

export type { NavigatorProps };

const Navigator: React.FC<NavigatorProps> = props => {
const Navigator: React.ForwardRefRenderFunction<any, NavigatorProps> = (props, ref) => {
const { className, url, action, hoverClassName, hoverStartTime, hoverStayTime, ...restProps } = filterProps(props);
const history = RuntimeOptions.get('history');

Expand All @@ -28,4 +28,4 @@ const Navigator: React.FC<NavigatorProps> = props => {

return <div {...restProps} className={clsx(className)} onClick={handleTap} />;
};
export default Navigator;
export default React.forwardRef(Navigator);
5 changes: 3 additions & 2 deletions packages/remax-one/src/hostComponents/Text/index.web.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { filterProps } from '../../utils/isPlatformSpecifyProp';

export type TextProps = TextWebProps;

const Text: React.FC<TextWebProps> = props => {
const Text: React.ForwardRefRenderFunction<any, TextWebProps> = (props, ref) => {
const {
onTap,
onTouchStart,
Expand Down Expand Up @@ -56,6 +56,7 @@ const Text: React.FC<TextWebProps> = props => {
className={clsx(className, {
'remax-text-selectable': selectable,
})}
ref={ref}
onClick={onTap}
onTouchStart={handleTouchStart}
onTouchMove={handleTouchMove}
Expand All @@ -65,4 +66,4 @@ const Text: React.FC<TextWebProps> = props => {
);
};

export default Text;
export default React.forwardRef(Text);
10 changes: 3 additions & 7 deletions packages/remax-one/src/hostComponents/Textarea/index.web.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import clsx from 'clsx';

export type TextareaProps = TextareaWebProps;

const Textarea: React.FC<TextareaWebProps> = props => {
const Textarea: React.ForwardRefRenderFunction<any, TextareaWebProps> = (props, ref) => {
const { onConfirm, onKeyPress, autoHeight, className, placeholderStyle, ...restProps } = filterProps(props);
const [placeholderStyleClassName] = useWebPlaceholderStyle(placeholderStyle);

Expand All @@ -27,10 +27,6 @@ const Textarea: React.FC<TextareaWebProps> = props => {
return <TextareaAutoSize {...restProps} className={textareaClassName} onKeyPress={handleKeyPress} />;
}

return <textarea {...restProps} className={textareaClassName} onKeyPress={handleKeyPress} />;
};
export default Textarea;

Textarea.defaultProps = {
onChange: () => void 0,
return <textarea {...restProps} className={textareaClassName} ref={ref} onKeyPress={handleKeyPress} />;
};
export default React.forwardRef(Textarea);
14 changes: 5 additions & 9 deletions packages/remax-one/src/hostComponents/View/index.web.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,11 @@ import useWebTouch from '../useWebTouch';

export type ViewProps = ViewWebProps;

const View: React.FC<ViewWebProps> = props => {
const View: React.ForwardRefRenderFunction<any, ViewProps> = (props, ref) => {
const {
hoverClassName,
hoverStartTime,
hoverStayTime,
hoverStartTime = 50,
hoverStayTime = 400,
className,
onTouchStart,
onTouchMove,
Expand All @@ -33,6 +33,7 @@ const View: React.FC<ViewWebProps> = props => {
return (
<div
{...restProps}
ref={ref}
onTouchStart={handleTouchStart}
onTouchMove={handleTouchMove}
onTouchEnd={handleTouchEnd}
Expand All @@ -43,9 +44,4 @@ const View: React.FC<ViewWebProps> = props => {
);
};

View.defaultProps = {
hoverStayTime: 400,
hoverStartTime: 50,
};

export default View;
export default React.forwardRef(View);
9 changes: 6 additions & 3 deletions packages/remax-one/src/hostComponents/WebView/index.web.tsx
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
import * as React from 'react';
import { filterProps } from '../../utils/isPlatformSpecifyProp';
import clsx from 'clsx';

export interface WebViewProps extends React.AriaAttributes {
id?: string;
src: string;
onMessage?: (event: Event) => void;
className?: string;
style?: React.CSSProperties;
}

const WebView: React.FC<WebViewProps> = props => {
const WebView: React.ForwardRefRenderFunction<any, WebViewProps> = (props, ref) => {
const { onMessage, ...restProps } = filterProps(props);
React.useEffect(() => {
const listener = (event: Event) => {
Expand All @@ -21,7 +24,7 @@ const WebView: React.FC<WebViewProps> = props => {
return () => window.removeEventListener('message', listener);
}, []);

return <iframe {...restProps} className="remax-web-view" />;
return <iframe {...restProps} className={clsx('remax-web-view', props.className)} ref={ref} />;
};

export default WebView;
export default React.forwardRef(WebView);

1 comment on commit 990cde6

@vercel
Copy link

@vercel vercel bot commented on 990cde6 Jul 2, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.