Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.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
Javascript 如何先设置state,然后运行onSubmit函数_Javascript_Reactjs - Fatal编程技术网

Javascript 如何先设置state,然后运行onSubmit函数

Javascript 如何先设置state,然后运行onSubmit函数,javascript,reactjs,Javascript,Reactjs,我有一个来自另一个组件的对象,我想将对象值添加到我的数据中,但当我第一次单击提交时,控制台。log显示为空,下次就可以了。如何先设置状态 constpostform=({addPost})=>{ 常量[formData,setFormData]=useState({ 标题:“”, 说明:“”, 选项:{} }); 常数{ 标题 描述 选择权 }=表格数据; const onChange=e=>setFormData({…formData[e.target.name]:e.target.value

我有一个来自另一个组件的对象,我想将对象值添加到我的数据中,但当我第一次单击提交时,
控制台。log
显示为空,下次就可以了。如何先设置状态

constpostform=({addPost})=>{
常量[formData,setFormData]=useState({
标题:“”,
说明:“”,
选项:{}
});
常数{
标题
描述
选择权
}=表格数据;
const onChange=e=>setFormData({…formData[e.target.name]:e.target.value});
const onSubmit=e=>{
e、 预防默认值();
常量oto={…选项,…新选项}
//>>第一次不工作
setFormData({…formData,选项:oto})
console.log(formData.options)
}

通过在useEffect中使用submitState解决了该问题。通过在useEffect中指定条件

    const [startOnSubmit, changeOnSubmit] = useState(false)

    useEffect(() => {
        if (startOnSubmit) {
            addPost(formData);
            changeOnSubmit(false);
        }
    }, [formData, addPost, startOnSubmit, changeOnSubmit]);

    const onSubmit = e => {
        e.preventDefault();
        const oto = { ...options, ...newOptions }
        setFormData({
            ...formData,
            options: oto,
            category: selected === null ? '' : selected.id
        });
        changeOnSubmit(true)
    }

onSubmit函数之外的console.log。它可能正在工作。设置状态为async这是否回答了您的问题?或者这一个useState不会立即触发,因为它是异步的,并且您没有在任何地方侦听更改。您需要使用useEffect挂钩:它是重复的,我第一次链接了错误的,现在它不允许让我纠正一下