-
Notifications
You must be signed in to change notification settings - Fork 4.8k
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
微信小程序getDerivedStateFromProps有bug,影响页面更新 #3929
Comments
欢迎提交 Issue~ 如果你提交的是 bug 报告,请务必遵循 Issue 模板的规范,尽量用简洁的语言描述你的问题,最好能提供一个稳定简单的复现。🙏🙏🙏 如果你的信息提供过于模糊或不足,或者已经其他 issue 已经存在相关内容,你的 issue 有可能会被关闭。 Good luck and happy coding~ |
CC @Chen-jj |
@Chen-jj 你发的官方文档连接,我还是没搞明白为什么小程序没有触发这个方法。官方文档不是说每次render前都会触发吗? |
@ItxiaoDz 如果你有认真看我发的文档链接,就明白了。 |
@Chen-jj 能提示一下吗? |
@ItxiaoDz 你看了吗 |
@ItxiaoDz 文档白纸黑字写得很清楚了,我甚至都帮你找到对应位置的锚点了。沉下气撸一遍文档吧。 |
看了呀。都看了4、5遍了。我菜,行了吧 |
@ItxiaoDz 那你把你翻译的这段文档贴上来,我帮你找 |
这里大概说的getDerivedStateFromProps在render之前执行,包括第一次挂载和以后的更新。它需要返回一个对象更新state,或者返回一个null去告诉框架不更新任何东西。
|
我再加了一些测试代码 <Button className='dec_btn' onClick={this.localClick}>local</Button>
localClick = () => {
this.setState({
time2222: new Date().getTime(),
})
} 这样点击local按钮时,会触发getDerivedStateFromProps方法。也就只要触发了页面渲染(要执行render方法),都会执行这个生命周期函数。这样也就是说对官方文档的理解大体正确 而我是想用redux的方式,通过改变组件的props来触发页面重新渲染,reducer中返回state时,如下: return {
...state,
num: state.num + 1
} 如果props有触发diff流程,按照你给的diff的说明文档,应该会触发 |
@ItxiaoDz 跑了你的 demo,关注点错了,在于 redux listener 没有触发,getDerivedStateFromProp 甚至还没执行。等下个版本再试试 |
请问这个问题解决了么,我在mobx 里面也碰到了getDerivedStateFromProps 导致页面不刷新渲染 |
问题描述
在页面组件中,增加getDerivedStateFromProps声明周期函数后,在微信小程序中运行时,只会在页面初始挂载时被调用一次。同时使用redux、dva等状态管理工具,当model的状态改变后,不会触发该生命周期函数,同时页面也不会更新。
当前测试是微信小程序有问题,h5正常,其他小程序没有进行测试。
复现步骤
上传了一份示例代码:https://github.com/ItxiaoDz/taro-demo
也就是用官方cli创建的项目,创建时引入了redux。
在src/pages/index/index.tsx中加入了如下代码
期望行为
点击页面中“+”,“-”,程序调用了相关action方法,model的state改变了,会触发getDerivedStateFromProps生命周期函数,然后页面同时进行更新
报错信息
截图中可以看到多次调用action方法,相关的model的state也改变了,但是页面没有变化,getDerivedStateFromProps也没被触发
系统信息
补充信息
The text was updated successfully, but these errors were encountered: