Zac*_*ack 5 typescript reactjs react-native react-state react-functional-component
使用基本的表单/输入布局,很明显应该使用回调来处理从子组件到父组件的状态更改(由子组件启动),但是父组件如何要求子组件重新评估其状态并传达该信息回到父级?
\n这里的最终目标只是在提交表单按钮时触发子输入的验证。
\n给定的 [ts] 代码如下所示:
\n const Login : React.FC<Props> = (props) => {\n ...useStates omitted\n\n const onSubmit = () : void => {\n //trigger `verify()` in PasswordInput to get up-to-date `valid` state var\n\n \n }\n \n return (\n <PasswordInput\n onValidChange={setValid} />\n <Button\n onPress={submit} />\n )\n }\n\n\n const PasswordInput : React.FC<Props> = (props) => {\n ...useStates omitted\n\n const verify = () => {\n //verify the password value from state\n\n props.onValidChange(true)\n }\n\n\n return (<Input onBlur={verify}/>) \n }\nRun Code Online (Sandbox Code Playgroud)\n迄今为止采取的注释/路径:
\nuseEffect更新submitted确实有效触发重新验证的状态变量,但 的排序useEffect总是在父组件评估之后onSubmit,导致值过时。valid即,在变量更新之前需要单击两次提交。更新\n经验教训:
\nverify上面的方法实际返回最新值。Nad*_*ova 10
一个简单的例子说明如何解决这个问题
function Child(props)
{
const validate = () => alert('hi from the child');
props.registerCallback(validate)
return (<div>I'm the child</div>)
}
function Parent()
{
const callbackRef = React.useRef();
function registerCallback(callback) {
callbackRef.current = callback;
}
return (
<div>
<Child registerCallback={registerCallback} />
<button onClick={() => callbackRef.current()}>
say hello
</button>
</div>
)
}
Run Code Online (Sandbox Code Playgroud)
https://jsfiddle.net/4howanL2/5/
| 归档时间: |
|
| 查看次数: |
2938 次 |
| 最近记录: |