Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.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钩子中,如何找出哪些事件触发了状态更改?_Reactjs_React Hooks - Fatal编程技术网

Reactjs 在useEffect钩子中,如何找出哪些事件触发了状态更改?

Reactjs 在useEffect钩子中,如何找出哪些事件触发了状态更改?,reactjs,react-hooks,Reactjs,React Hooks,我正在使用useffecthook在更新状态后执行一些副作用。这非常好,只要子组件调用setOptions,useffect也会激发。 我试图找出是否有办法区分谁更新了选项,并根据这些选项执行额外的工作?更准确地说,我想调用useffect中的另一个函数,前提是依赖项由特定组件更新。下面是一个简单的例子,说明我正在尝试做什么: 函数应用程序(){ const[value,setValue]=useState({}); const[options,setOptions]=useState([]

我正在使用
useffect
hook在更新状态后执行一些副作用。这非常好,只要子组件调用
setOptions
useffect
也会激发。
我试图找出是否有办法区分谁更新了选项,并根据这些选项执行额外的工作?更准确地说,我想调用
useffect
中的另一个函数,前提是依赖项由特定组件更新。下面是一个简单的例子,说明我正在尝试做什么:

函数应用程序(){
const[value,setValue]=useState({});
const[options,setOptions]=useState([]);
useffect(()=>{
const newValues=wait getNewValues();
设置值(新值);
//如果选项已从ChildComponentA更改
//然后做点别的什么都不做
},[选择];
函数doSomething(){}
返回(
)
}


这个例子可能很奇怪,它只是我遇到的问题的一个例子。主要问题是状态可以由多个事件更改,我无法判断是哪个事件触发了状态更改。也许您可以尝试向
options
变量添加一个额外的参数,该参数将告诉您从何处触发更改,即
options.child='A'
,它会告诉您它来自A,您可以检查useffect中的条件为
if(options.child==“A”)
,这当然需要
options
是一个对象而不是数组,并且在
handleChange
回调中执行类似的操作

<ChildComponentA handleChange={(value) => {value.child ='A'; setOptions(value);}} />
{value.child='A';setOptions(value);}}/>
更深入地说,作为个人建议,如果某个地方或另一个地方改变了你的应用程序,那么你的应用程序不应该以在同一个状态下工作不同为目标,因为该状态的主要目的之一是成为你组件中的普遍真理来源,并且每个使用它的子组件都会这样对待它

<ChildComponentA handleChange={(value) => {value.child ='A'; setOptions(value);}} />