使用 useRef 动态关注输入(子组件)不起作用
dynamically focus on input (children component) using useRef doesn't work
我在父组件中创建了 'textRef',并使用 createRef() 传递给子组件。
我正在尝试将子组件中的输入动态地集中在道具更改上。
当我在本地主机 (chrome) 上测试但在网络视图上测试时它确实有效。
关于这个问题有什么建议吗?
谢谢!!
父组件
const UserAddressForm = ({ query }) => {
const textRef = useRef(null);
const {
state: { newAddress },
saveMultiData,
} = query;
useEffect(() => {
if (textRef && textRef.current) {
textRef.current.focus();
}
}, [newAddress.zipcode]);
const onAddressChange = (type, value) => {
const addressObj = {
...newAddress,
};
...
saveMultiData({ newAddress: addressObj });
};
return (
<InfoUl margin="21px 0px 0px;">
...
<TextField
ref={textRef}
label=""
name="addr2"
placeholder="상세주소 입력"
textField={newAddress}
onInputChange={e => onAddressChange('addr2', e.target.value)}
/>
</InfoUl>
);
};
子组件
import React from 'react';
import PropTypes from 'prop-types';
import { LabelBox, InputBox } from './styles';
const TextField = React.forwardRef(
(
{
label = null,
name,
type,
placeholder,
textField,
onInputChange,
autoComplete,
pattern,
disabled,
width,
flex,
marginRight,
marginBottom,
},
ref,
) => (
<LabelBox width={width} marginBottom={marginBottom}>
{label !== null && <label htmlFor={label}>{label}</label>}
<InputBox flex={flex} marginRight={marginRight}>
<input
ref={ref}
type={type || 'text'}
name={name}
placeholder={placeholder}
value={textField[name] || ''}
onChange={onInputChange}
autoComplete={autoComplete || 'on'}
pattern={pattern || null}
disabled={!!disabled}
/>
</InputBox>
</LabelBox>
),
);
版本
React v16.9.0
我通过使用输入 autoFocus 属性以及 ref 属性解决了它。
由于 input
在单击按钮时出现 dynamically
,因此 ref.focus
将不起作用。
AutoFocus 将在输入出现时获得焦点。
然后 Ref 将得到 re-focus 其中输入已经放在地址 re-search.
我在父组件中创建了 'textRef',并使用 createRef() 传递给子组件。 我正在尝试将子组件中的输入动态地集中在道具更改上。
当我在本地主机 (chrome) 上测试但在网络视图上测试时它确实有效。
关于这个问题有什么建议吗? 谢谢!!
父组件
const UserAddressForm = ({ query }) => {
const textRef = useRef(null);
const {
state: { newAddress },
saveMultiData,
} = query;
useEffect(() => {
if (textRef && textRef.current) {
textRef.current.focus();
}
}, [newAddress.zipcode]);
const onAddressChange = (type, value) => {
const addressObj = {
...newAddress,
};
...
saveMultiData({ newAddress: addressObj });
};
return (
<InfoUl margin="21px 0px 0px;">
...
<TextField
ref={textRef}
label=""
name="addr2"
placeholder="상세주소 입력"
textField={newAddress}
onInputChange={e => onAddressChange('addr2', e.target.value)}
/>
</InfoUl>
);
};
子组件
import React from 'react';
import PropTypes from 'prop-types';
import { LabelBox, InputBox } from './styles';
const TextField = React.forwardRef(
(
{
label = null,
name,
type,
placeholder,
textField,
onInputChange,
autoComplete,
pattern,
disabled,
width,
flex,
marginRight,
marginBottom,
},
ref,
) => (
<LabelBox width={width} marginBottom={marginBottom}>
{label !== null && <label htmlFor={label}>{label}</label>}
<InputBox flex={flex} marginRight={marginRight}>
<input
ref={ref}
type={type || 'text'}
name={name}
placeholder={placeholder}
value={textField[name] || ''}
onChange={onInputChange}
autoComplete={autoComplete || 'on'}
pattern={pattern || null}
disabled={!!disabled}
/>
</InputBox>
</LabelBox>
),
);
版本
React v16.9.0
我通过使用输入 autoFocus 属性以及 ref 属性解决了它。
由于 input
在单击按钮时出现 dynamically
,因此 ref.focus
将不起作用。
AutoFocus 将在输入出现时获得焦点。
然后 Ref 将得到 re-focus 其中输入已经放在地址 re-search.