Javascript 我能';我不理解此代码(用于React/Redux)是如何工作的
我有一个问题要问React/Redux 我正在制作一个web应用程序。它以我希望的方式完美工作,没有任何问题。尽管我不明白。我不明白的部分就是这一部分 这是我的密码Javascript 我能';我不理解此代码(用于React/Redux)是如何工作的,javascript,reactjs,redux,Javascript,Reactjs,Redux,我有一个问题要问React/Redux 我正在制作一个web应用程序。它以我希望的方式完美工作,没有任何问题。尽管我不明白。我不明白的部分就是这一部分 这是我的密码 const myApps = () => { let myInfo = {}; const form = []; form.push(<div>what</div>); myInfo = form.reduce((prev, element, index) => { pre
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!');
constmyapps=()=>{
让myInfo={};
常量形式=[];
推(什么);
myInfo=表单.reduce((上一个,元素,索引)=>{
prev[index]={isTrue:false};
返回上一个;
}, {});
}
useffect(()=>{
uploadToRedux(myInfo);//这是redux调度。我在这里“仅”上传到redux。
}, []);
myInfo[0]。isTrue=true;
if(myInfo[0].isTrue)console.log('Correct!');
else console.log('error!');
仅当使用useffect将myInfo
发送到Redux时,我才使用componentDidMount
。顺便说一下,当我切换myInfo[0].isTrue=true时,redux中的状态会同时改变。即使我没有发邮件
当然,这是我想要的,但是即使我没有发送消息,redux中的状态是否有任何变化?这怎么可能呢?我知道,当您请求服务器(API)将数据返回给您时,您需要调度自己。所以它需要是异步的,但当它不是异步的时候,你只需要将数据传递到存储,它就会自动调度 因此,无论何时数据在延迟后返回,它都是一个异步请求,当您收到数据时,您需要调度数据。(如果您不这样做,您可能会得到一个错误,因为redux发送了一个未定义的数据)
我希望它能对您有所帮助。据我所知,当您请求服务器(API)向您返回数据时,您需要自行调度。所以它需要是异步的,但当它不是异步的时候,你只需要将数据传递到存储,它就会自动调度 因此,无论何时数据在延迟后返回,它都是一个异步请求,当您收到数据时,您需要调度数据。(如果您不这样做,您可能会得到一个错误,因为redux发送了一个未定义的数据)
我希望它能对您有所帮助。请注意,您正在将一个函数作为回调传递给
useffect()
() => {
uploadToRedux(myInfo); // this is redux dispatch. I upload to redux "only" here.
}
useffect()
将立即执行,但匿名函数(回调)将计划由JS运行时执行(即准备执行,但实际上尚未执行)
当回调即将在redux中执行和更新值时,JS运行时将已经在useffect()之后执行了这些行,即在redux更新之前将执行以下代码行:
myInfo[0].isTrue = true;
if (myInfo[0].isTrue) console.log('Correct!');
else console.log('Incorrect!');
所以当JS运行时将执行以下行:
uploadToRedux(myInfo);
myInfo[0]的值。isTrue
将被更新,并将被重新使用
这种现象被称为回调地狱。要了解更多信息,请阅读以下内容:
确实,请在redux更新之前记录myInfo[0]的值
useEffect(() => {
console.log("myInfo[0].isTrue", myInfo[0].isTrue);
uploadToRedux(myInfo); // this is redux dispatch. I upload to redux "only" here.
}, []);
请注意,您正在将函数作为回调传递给
useffect()
() => {
uploadToRedux(myInfo); // this is redux dispatch. I upload to redux "only" here.
}
useffect()
将立即执行,但匿名函数(回调)将计划由JS运行时执行(即准备执行,但实际上尚未执行)
当回调即将在redux中执行和更新值时,JS运行时将已经在useffect()之后执行了这些行,即在redux更新之前将执行以下代码行:
myInfo[0].isTrue = true;
if (myInfo[0].isTrue) console.log('Correct!');
else console.log('Incorrect!');
所以当JS运行时将执行以下行:
uploadToRedux(myInfo);
myInfo[0]的值。isTrue
将被更新,并将被重新使用
这种现象被称为回调地狱。要了解更多信息,请阅读以下内容:
确实,请在redux更新之前记录myInfo[0]的值
useEffect(() => {
console.log("myInfo[0].isTrue", myInfo[0].isTrue);
uploadToRedux(myInfo); // this is redux dispatch. I upload to redux "only" here.
}, []);