-
Notifications
You must be signed in to change notification settings - Fork 30
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
使用时出现action in action的小问题 1.0.0 #20
Comments
effect异步里返回的时候有处action ,我在想是不是这俩冲突了。因为我把在page里初始化时action移到effect里 就正常了。 |
page A 点击按钮 执行model.effect 异步结果写入 state.info = abc ,同时点击按钮时弹出弹窗,弹窗里显示 state.info 。 弹窗初始的时候useEffect(()=>model.action) 这样就会出错了。得把model.action移到model.effect里面。 但这俩逻辑又不一样,放一起有点怪。 |
出现action in action 一般是因为在action方法内部执行了其它action或者effect方法。我看下有没有遗漏的场景。你这边也看下有没有办法提供一个可复现的repo |
抱歉,我这里暂时没看出什么问题。 |
好的我先更新一下 |
错误提示是对的,model.effect 异步返回结果时调用action更新state, 和 在page里的useEffect里调用action初始某个state 发生冲突了。 |
更新一个issus 以前没有提示的地方现在也有个提示了。就是在model.effect 异步结果里_this.action会提示不存在属性action。 |
排查比较困难,能否提供一个可复现的简易repo? |
effect不能使用箭头函数,以及异步回调需要使用箭头函数,才能保证this的正确性 |
贴代码吧。也有可能是我写的有问题 见谅。 PageA.jsx
SomeModel.js
Page Modal.js
这样写的话,点击按钮modal出现的时候模拟器正常,手机上就会分发错误,但是如果把modal里useEffect里的移到 _this.setAction(res.data)这句后面 就没事了 |
写法没有问题,建议先切换到0.12.3(功能一致),我本地再测试一下。 另外再提供一下测试手机的系统和版本 |
ios 和 微信 都最新版本 |
微信库是2.24.7 |
try {
dispatching = true;
prevAction = action;
var result = dispatch2(action);
prevAction = null;
dispatching = false;
return result;
} catch (e) {
prevAction = null;
dispatching = false;
throw e;
} 我怀疑小程序不支持finally,但是没有证据,家里没办法真机调试 |
好的 我现在试一下 |
找到一篇之前看的文章,应该和这个问题类似:https://forum.cocos.org/t/ios-bug-jsc-await-promise-mircotasks/83275 我这边也复现了,同步执行的操作被插入了其它操作。 |
我好像说错了action,但是情况一样,地图regionChange时执行一个action 把区域更新到model里,然后在地图界面 |
大概找到原因了,redux更新完数据后,会遍历subscriber并执行,其中react-redux也订阅了,react-redux那边检测到数据变化然后执行了一下 所以目前有两个方式:
你那边暂时解决的思路可以这么做: useEffect(() => {
Promise.resolve().then(() => {
model.action();
});
}, []); |
好,感谢 |
已经发布 v1.0.2 解决了这个问题,如果没问题则关闭此issue |
加油 |
晚点试一下 |
nice job |
模拟器里正常
真机预览提示action in action
但是代码里只有state.xxx=yyy
我还在找原因
The text was updated successfully, but these errors were encountered: