-
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
redux-persist 在 3.0.0-rc.3 版本使用报错 #6548
Comments
@qiwang97 提供一下 demo 吧 |
先这样改吧: // redux-persist-taro-storage.ts
{
getItem(key) {
return Promise.resolve().then(() => {
return Taro.getStorageSync(key)
})
},
...
} |
出现了一样的问题,我 npm 安装了 taro-ui 包以后出现了一样的问题,包卸载了问题还在,服 |
@yuche 同样问题,有计划什么时候修复这个问题吗,版本v3.0.5,sync版本生产环境没法用啊 |
小程序页面 这种写法,当 <Provider store={store}>
<PersistGate loading={null} persistor={persistor}>
{this.props.children}
</PersistGate>
</Provider> 这样改生产环境不能接受的话:
可以选择不用 // page
class Index extends Component {
render () {
return (
<PersistGate loading={null} persistor={res.persistor}>
// ...
</PersistGate>
)
}
} |
@Chen-jj 如果进小程序的时候带上了路径,是否就会跳过首页导致PersistGate没有起作用? |
@fwh1990 我看了下源码,也实际测试了一下,发现当给定路径后PersistGate确实不会再被调用。但是并不妨碍从storage里面读取已经缓存的数据。可能会发生的问题就是初始化的时候没有数据。 |
@fwh1990 @tian-zhihui 找到一个比较hack但相对比较完美的解决方法 这个问题发生的根本原因Chen-jj在上面已经说了,是因为 const mount = () => {
Current.app!.mount!(component, path, () => {
pageElement = document.getElementById<TaroRootElement>(path)
ensure(pageElement !== null, '没有找到页面实例。') // pageElement为null(页面级组件没初始化)导致报错
safeExecute(path, 'onLoad', options)
if (!isBrowser) {
pageElement.ctx = this
pageElement.performUpdate(true, cb)
}
})
} 所以换个思路,想办法在 所以我们把页面级组件放到 <Provider store={store}>
<PersistGate loading={props.children} persistor={reduxPersistor}>
{props.children}
</PersistGate>
</Provider> 可以去看 render() {
if (process.env.NODE_ENV !== 'production') {
if (typeof this.props.children === 'function' && this.props.loading)
console.error(
'redux-persist: PersistGate expects either a function child or loading prop, but not both. The loading prop will be ignored.'
)
}
if (typeof this.props.children === 'function') {
return this.props.children(this.state.bootstrapped)
}
return this.state.bootstrapped ? this.props.children : this.props.loading
} 一开始的时候 PS:使用函数的形式也是可以的 <Provider store={store}>
<PersistGate persistor={reduxPersistor}>
{() => props.children}
</PersistGate>
</Provider> |
今天再去看小程序文档,发现一个重要信息,ios上的Promise是
根据taro现在的逻辑,需要重写 |
小程序退出重新打开以后,数据还是初始化状态,而没有保持持久化;我还是只能把PersistGate放在首页里面,放在App.tsx中编译会报错;版本是3.6.5 |
小程序退出重新打开以后,数据还是初始化状态,而没有保持持久化;我测试发现,修改状态,他不会触发setItem的操作,但是模拟器是正常的,手机扫二维码是没有的 |
问题描述
redux-persist 在 3.0.0-rc.3 版本使用报错
复现步骤
期望行为
数据正常缓存和加载
报错信息
系统信息
补充信息
taro v2.1.0 版本使用时正常
The text was updated successfully, but these errors were encountered: