Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.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 为什么第一次父回调函数中的子状态值未更新?_Reactjs_React Hooks - Fatal编程技术网

Reactjs 为什么第一次父回调函数中的子状态值未更新?

Reactjs 为什么第一次父回调函数中的子状态值未更新?,reactjs,react-hooks,Reactjs,React Hooks,为什么第一次父回调函数中的子状态值未更新?我想根据状态禁用输入字段 具有完整示例的沙盒:问题 页眉 初始状态为true,单击按钮时调用editViewHandler。它切换该组件的edit状态,然后使用edit的当前值调用editCallback回调,该值最初为true。您正在将未更新的值发送到回调!(在UserProfile中再次将其设置为true)您还可以通过反转发送到editCallback的edit值来解决此问题 const [edit, setEditView] = useState(

为什么第一次父回调函数中的子状态值未更新?我想根据状态禁用输入字段

具有完整示例的沙盒:

问题 页眉

初始状态为
true
,单击按钮时调用
editViewHandler
。它切换该组件的
edit
状态,然后使用
edit
当前值调用
editCallback
回调,该值最初为
true
。您正在将未更新的值发送到回调!(在
UserProfile
中再次将其设置为
true
)您还可以通过反转发送到
editCallback
edit
值来解决此问题

const [edit, setEditView] = useState(true);

const editViewHandler = () => {
  setEditView(!edit);
  editCallback(!edit); // <-- send the same value you update state to
};
并附加到按钮的
onClick
处理程序

const PageHeader = ({ title, subtitle, button, editCallback }) => (
  <div className="page-header py-4 withBtn d-flex align-items-center">
    {button ? <Button onClick={editCallback}>Edit Detail</Button> : null}
  </div>
);
constpageheader=({title,subtitle,button,editCallback})=>(
{按钮?编辑详细信息:null}
);

您指的是
控制台.log(编辑)紧接着
设置编辑(编辑)
用户配置文件中
?请提供有关问题的更多详细信息,您所做的任何调试,复制步骤,并在此处包含问题的相关代码。请参考我所做的完整实现链接。我想简单地使输入文本禁用/启用基于状态,在初始渲染时,当我们点击按钮状态不更新,但在第一次点击它的工作良好。。。你能编辑我的沙盒或建议我在哪里出错吗。我做了。。。但你还是应该提供这些细节。。。我们的工作不是筛选整个代码库来调试代码,也就是说,这不是免费的调试服务。让有人花空闲时间来帮助你变得容易。更多信息,请查看我的上述回复。感谢Drew抽出宝贵的时间,是的,现在开始工作了。。关于我在页面头文件const[edit,setEditView]=useState(true)中的代码的一个问题;const editViewHandler=()=>{setEditView(!edit);editCallback(edit);//@Roy当您
setEditView(!edit)
切换该值时,当您
editCallback(edit)时,该值尚未处于切换状态
在下一行,它在当前渲染周期中仍然是相同的值,即在函数完成并做出反应后更新状态和重新渲染之前,它实际上不会从
true
切换到
false
。将值反转为update state,因此将相同的反转值发送到回调更正确。这不是这与您无法在更新新状态值后立即将其记录到console.log中的原因相同。
const PageHeader = ({ title, subtitle, button, editCallback }) => (
  <div className="page-header py-4 withBtn d-flex align-items-center">
    {button ? <Button onClick={editCallback}>Edit Detail</Button> : null}
  </div>
);