繁体   English   中英

我不明白此代码(适用于React / Redux)如何工作

[英]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!');

我仅通过使用useEffectmyInfo发送到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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM