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>
);