Reactjs 道具更改不触发使用效果

Reactjs 道具更改不触发使用效果,reactjs,react-props,use-effect,react-jsonschema-forms,Reactjs,React Props,Use Effect,React Jsonschema Forms,我有一个带有useEffect的react组件,当道具改变时它不会被触发。我希望此组件根据道具更新它显示的内容。但是,当道具改变时,什么也不会发生 为了进行调试,我添加了一个按钮,可以手动更新值,效果很好。我就是不能得到有用的效果,为了我的生命而奔跑 const ReadOnly=(props:WidgetProps)=>{ const[value,setValue]=React.useState('No value'); const{formContext}=props; 常量firstNam

我有一个带有useEffect的react组件,当道具改变时它不会被触发。我希望此组件根据道具更新它显示的内容。但是,当道具改变时,什么也不会发生

为了进行调试,我添加了一个按钮,可以手动更新值,效果很好。我就是不能得到有用的效果,为了我的生命而奔跑

const ReadOnly=(props:WidgetProps)=>{
const[value,setValue]=React.useState('No value');
const{formContext}=props;
常量firstName=()=>formContext.queryData[0]?.basicInformation?.firstName???“无值”;
//这仅在组件首次渲染时运行一次,在formContext更新时从不激发。
React.useffect(()=>{
setValue(firstName());
},[formContext]);
//这将正确更新该值
const onClick=(e:React.MouseEvent)=>{
e、 预防默认值();
setValue(firstName());
};
返回(
{value}

更新值 ); }; 导出默认只读;
我已尝试将useEffect函数监视的值从
formContext
更改为
formContext.queryData[0].basicInformation.firstName
为无效。我也尝试过使用
道具
。我甚至试图完全删除手表阵列,希望它只是垃圾邮件更新,但什么也没有

有没有关于我如何做到这一点的建议?我知道该值正在传递到该组件,因为当我按下按钮时,它会工作。当我在网页上的React inspector中查看它时,我可以清楚地看到值在那里。干杯

编辑: 此组件用作react jsonschema表单的小部件。基本上,每次更新
formData
时,我都会将其传递回
formContext
formContext
是我获取该小部件的其他数据的唯一方法。下面是我正在做的一个精简版本

const[formDataAndIncludings,setFormDataAndIncludings]=React.useState(null);
ClientRect.useffect(()=>{
...
//表单数据的初始加载,包括
...
}, [])
const onChange=(e:IChangeEvent)=>{
const newFormDataAndIncludings={…formDataAndIncludings};
newFormDataAndIncludings.queryData[0]=e.formData;
setFormDataAndIncludings(新FormDataAndIncludings);
};
返回(
)

该状态在父级的
onChange
中直接发生变异,因此不会触发
只读
组件中的useEffect

更新您的onChange

const onChange=(e:IChangeEvent)=>{
setFormDataAndIncludings(上一页=>({
…上一页,
queryData:[
e、 formData,
…上一个queryData.slice(0,1)
]
}))

//const newFormDataAndIncludings={…formDataAndIncludings};
//newFormDataAndIncludings.queryData[0]=e.formData;
//setFormDataAndIncludings(新FormDataAndIncludings);
};
像往常一样提供useEffect依赖关系

React.useffect(()=>{
setValue(firstName());
},[formContext]);

你能展示一下你是如何更新formContext的吗?@AtinSingh,我已经更新了我的帖子,展示了它是如何更新的。嘿,谢谢你的建议。不幸的是,我也试过了,但没有成功。我觉得很奇怪。此外,我很乐意传递我想要的道具,但是,我正在处理一个不允许我这样做的库(react jsonschema表单)。明白了。。。刚刚看到你更新的问题。。。我现在就更新答案,完成了!非常感谢。我会投票赞成你的答案,但我太笨了,不能给分。再次非常感谢!编辑:显然我现在可以投票了。