【发布时间】:2021-03-08 04:35:32
【问题描述】:
如果 formik 的值发生变化,我想使用 useEffect 重新渲染字段。但它不起作用..
实际上我创建了一个小例子来说明我的问题。 这里我有一个字段“标题”,如果这个字段发生了变化(当我们写进去时)它应该调用 useEffect 并打印“更新!”但它没有!
const FormikWidgetConfigurator = (props) => {
useEffect(() => {
// doesn't work if values has changed
console.log('update!')
}, [props.values]);
return (
<Form onSubmit={ props.handleSubmit } noValidate>
<Form.Group className='py-3' >
<Col md='6' style={{ padding: '0px' }}>
<Form.Group controlId='title'>
<Form.Control
type='text'
value={ props.values.title }
onChange={props.handleChange}
/>
</Form.Group>
</Col>
</Form.Group>
</Form>
)
}
const WidgetConfigurator = withFormik({
mapPropsToValues(props) {
return {
title: 'No Title'
};
},
validationSchema: props => Yup.object().shape({title: Yup.string()}),
handleSubmit(values, { setSubmitting }) {// handle submit}
})(FormikWidgetConfigurator);
export default WidgetConfigurator;
编辑:实际上它按预期工作。 (我没有改变任何东西)
谢谢!
【问题讨论】:
-
为什么要特别触发 useEffect ?您可以使用 handleChange 处理更改,如果您正在寻找特定的目标,您可以在您的方法中进行过滤。
-
顺便说一句,
useEffect不会导致重新渲染