function allReducer(state=Map({}), action){ let newstate = Map({}) switch (action.type) {
case SET_CSRFTOKEN:
return state.set("csrftoken", action.csrftoken)
case START_WORK: {
console.log('开工')
console.log(state)
axios({
method: 'post',
headers: {'X-CSRFToken': state.get('csrftoken')},
url: '/start/',
data: {startdate:action.startdate,enddate:action.enddate},
}).then(function (response) {
newstate = state.set("atwork", response.data.atwork)
console.log(newstate)
});
console.log(newstate)
return newstate
}
倒数第二个 console.log(newstate)可以看到里面是有值的,最后一个 console.log(newstate)里面就是空的了,没有任何值。请问这是怎么回事?
1
ruandao 2020-01-12 22:01:15 +08:00
redux 里面不要 有 异步之类的副作用
|
2
ruandao 2020-01-12 22:02:20 +08:00
倒数第二个 console.log(newstate)可以看到里面是有值的,最后一个 console.log(newstate)里面就是空的了,没有任何值。请问这是怎么回事?
这个问题,是因为你不知道 promise 的运行顺序 |
3
redfortress OP @ruandao 那是不是要在 redux-saga 里执行这个就没问题了?
|
4
ruandao 2020-01-12 22:14:53 +08:00
|
5
FaiChou 2020-01-12 22:19:57 +08:00
建议先学学基础的异步, 再用 redux
|
6
wd 2020-01-12 22:22:00 +08:00 via iPhone
在那个 then 里面通过发一个 新的 action 来改状态.. 不过你这代码思路有问题
|
7
redfortress OP @wd 正确的思路应该是怎样的?
|
8
redfortress OP @ruandao 明白了。谢谢。
|
9
redfortress OP @FaiChou 谢谢。
|
10
wd 2020-01-13 07:02:56 +08:00 via iPhone
redux 里面只管理状态,需要改变状态的时候通过 action 来改。action 可以通过多种方式触发,比如用户点击,或者其他状态变化引起的
|
11
wd 2020-01-13 07:14:12 +08:00 via iPhone
https://wdicc.com/best-practice-for-react-native-redux/ 虽然写的有点早了,感觉应该还有用,希望对你有帮助。回头应该把如何 type 整理写一下。
|