[英]I can't understand how this code(for React/Redux) works
我有一个关于React / Redux的问题。
我正在制作一个Web应用程序。 它以我希望它没有任何问题的方式完美运行。 即使我不明白。 我不明白的部分是这一部分。
这是我的代码。
const myApps = () => {
let myInfo = {};
const form = [];
form.push(<div>what</div>);
myInfo = form.reduce((prev, element, index) => {
prev[index] = {isTrue : false};
return prev;
}, {});
}
useEffect(() => {
uploadToRedux(myInfo); // this is redux dispatch. I upload to redux "only" here.
}, []);
myInfo[0].isTrue = true;
if (myInfo[0].isTrue) console.log('Correct!');
else console.log('Incorrect!');
我仅通过使用useEffect将myInfo
发送到Redux,如果它是componentDidMount
。 顺便说一句,当我切换myInfo[0].isTrue = true
,redux中的状态会同时更改。 即使我没有发送调度!
当然,这就是我想要的,但是即使没有发送调度,redux的状态也有任何变化吗? 怎么会这样
据我所知,当您请求服务器(API)向您返回数据时,您需要调度自己。 因此它需要是异步的。但是当它不异步时,您只需将数据传递给存储,它就会分派自己。
因此,只要延迟后您的数据返回,它就是一个异步请求,接收数据时您需要调度数据。 (如果您不这样做,则可能会收到错误消息,因为redux会分派未定义的数据)
希望对您有帮助。
请注意,您正在将一个函数传递给useEffect()
作为回调。
() => {
uploadToRedux(myInfo); // this is redux dispatch. I upload to redux "only" here.
}
useEffect()
将立即执行,但匿名函数(回调)将被调度为由JS运行时执行(即准备执行,但实际上尚未执行)。
到回调即将在redux中执行和更新值时,JS运行时将已经在useEffect()之后执行了各行,即,以下代码行将在redux更新之前执行:
myInfo[0].isTrue = true;
if (myInfo[0].isTrue) console.log('Correct!');
else console.log('Incorrect!');
因此,当JS运行时将执行以下行:
uploadToRedux(myInfo);
myInfo[0].isTrue
将已经更新,并且将同样用于redux。
这种现象称为回调地狱。 要了解更多信息,请阅读: http : //callbackhell.com/
可以肯定的是,在redux更新之前记录myInfo [0] .isTrue的值
useEffect(() => {
console.log("myInfo[0].isTrue", myInfo[0].isTrue);
uploadToRedux(myInfo); // this is redux dispatch. I upload to redux "only" here.
}, []);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.