Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 创建编辑表单时,useEffect不会更新react钩子表单的默认值_Reactjs_Material Ui_React Hook Form - Fatal编程技术网

Reactjs 创建编辑表单时,useEffect不会更新react钩子表单的默认值

Reactjs 创建编辑表单时,useEffect不会更新react钩子表单的默认值,reactjs,material-ui,react-hook-form,Reactjs,Material Ui,React Hook Form,当呈现编辑表单组件时,我试图填充material ui datepicker字段的值,我可以在控制台中看到日期对象被正确创建,但它没有传递到状态,不知道我做错了什么 这是组件 function DatePickerField(props) { const { field , studentValues, control} = props; const classes = useStyle(); const [date, setDate] = useState(null

当呈现编辑表单组件时,我试图填充material ui datepicker字段的值,我可以在控制台中看到日期对象被正确创建,但它没有传递到状态,不知道我做错了什么

这是组件


function DatePickerField(props) {

    const { field , studentValues, control} = props;
    const classes = useStyle();
    const [date, setDate] = useState(null);
   
    
    const handleChange = (date) => {
        setDate(date)
               
    }

    

    // Check if the input name of the field we get from knack match the input name of the form and if yes display the value
    useEffect(() => {
        if (studentValues) {
            const dataStudentArranged = DataStudent(studentValues);
            dataStudentArranged.forEach((card) => {
                card.cardValues.forEach((cardValue) => {
                    
                    if (cardValue.formName === field.formName) {
                        const dateObject = fromUnixTime(cardValue.value/1000)
                        setDate(dateObject)
                        console.log('date object =>',dateObject)
                    }
                })
            })
        }
    }, []);

    return (
        <TableRow>
            <TableCell>
                <Controller defaultValue={date} name={field.formName} control = {control}
                as = {
                <DatePicker 
                    className={classes.datePicker}
                    inputVariant = "outlined"
                    label={field.label}
                    value={date} 
                    onChange={handleChange}
                    autoOk
                    variant="inline"
                    format= "dd, MMMM yyyy"
                    size="small"
                    />
                } 
                />
            </TableCell>
        </TableRow>
    )
}

export default DatePickerField



函数DatePickerField(props){
const{field,studentValues,control}=props;
const classes=useStyle();
const[date,setDate]=useState(null);
const handleChange=(日期)=>{
设置日期(日期)
}
//检查我们从knack获得的字段的输入名称是否与表单的输入名称匹配,如果是,则显示值
useffect(()=>{
if(学生价值观){
const dataStudentArranged=DataStudent(studentValues);
dataStudentArranged.forEach((卡片)=>{
card.cardValues.forEach((cardValue)=>{
if(cardValue.formName==字段.formName){
const dateObject=fromUnixTime(cardValue.value/1000)
setDate(日期对象)
log('date object=>',dateObject)
}
})
})
}
}, []);
返回(
)
}
导出默认日期选择器字段

谢谢

问题在于react钩子表单,它总是传递默认值,即使在使用useEfect之后,这个问题帮助我解决了这个问题:


基本上,当将react hook form与control prop一起使用时,我们应该使用setValue函数

您(可能)正在覆盖循环中的状态更新。您能否提供一个更详细的代码示例,以便我们更好地了解发生了什么?您还可以提供重现问题的步骤吗?Hi@DrewReese感谢您抽出时间来查看我的问题,我用组件的完整代码更新了帖子,除了导入和样式。TBH我没有看到任何会导致状态更新不起作用的内容,我完全相信react钩子会做它应该做的事情。我很好奇,是不是装载时效果只运行一次(即空的依赖项数组),装载后
studentValues
更新?在生命周期中多做一点日志记录会发生什么?您是否安装了react-dev工具以便进行更多挖掘?您的
useffect
hook中缺少一个依赖项。我猜
studentValues
是异步加载的,在第一次渲染时可能为null或未定义。它应该被添加到依赖数组中,这样当它的值发生变化时,效果就会被重新执行。我找到了解决方案,我在下面发布了答案并更改了问题。我希望它能帮助别人