b24*_*b24 5 react-native mobx mobx-react react-navigation mobx-persist
我想将mobx和mobx-persist与react-navigation集成.
我读过这些文章:
[1] https://hackernoon.com/react-navigation-with-mobx-2064fcdaa25b
[2] https://blog.callstack.io/write-react-native-apps-in-2017-style-with-mobx -e2dffc209fcb
[3] https://github.com/react-navigation/react-navigation/blob/8e8d3d562c9e80616f145f97ffb02dcf2048e67e/docs/guides/Mobx-Integration.md
[4] MobX + React Native:注入商店的方式
[5] MobX - 当我将数据注入React组件时可以使用`inject`时为什么要使用`observer`
[6] 在React组件中注入Store导致出错
但我仍然有这个错误:
undefined is not a function (evaluating 'decorator(target, property, desc)')
Run Code Online (Sandbox Code Playgroud)
这是我的App.js渲染:
render() {
const hydrate = create({
storage: AsyncStorage
});
hydrate('playerStore', stores.PlayerStore);
hydrate('settingStore', stores.SettingStore);
// .then(
// // () => console.warn('some hydrated')
// );
return <Provider {...stores} >
<AppWithNavigationState />
</Provider>;
}
Run Code Online (Sandbox Code Playgroud)
这是我的routeStore.js:
import {observable} from "mobx";
import {action} from "mobx-react/native";
import AppDrawer from "../appDrawer";
import {autobind} from 'core-decorators';
export default class RouteStore {
@observable.ref navigationState = {
index: 0,
routes: [
{ key: "R1", routeName: "ContentStack" },
],
};
@action
dispatchNavigation(action, stackState = true) {
const previousNavState = stackState ? this.navigationState : null;
return this.navigationState = AppDrawer.router.getStateForAction(action, previousNavState);
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的appWithNavigationState.js:
import React from 'react';
import {observer, inject} from "mobx-react/native";
import {addNavigationHelpers} from "react-navigation";
import AppDrawer from "../appDrawer";
@inject(stores => ({ routeStore: stores.RouteStore }))
@observer
export default class AppWithNavigationState extends React.Component {
render() {
return (
<AppDrawer navigation={addNavigationHelpers({
dispatch: this.props.routeStore.dispatchNavigation,
state: this.props.routeStore.navigationState,
})} />
);
}
}
Run Code Online (Sandbox Code Playgroud)
我也使用decorator包如下:
npm install babel-plugin-transform-decorators-legacy --save-dev
Run Code Online (Sandbox Code Playgroud)
和babelrc文件中的此设置:
{
"presets": ["react-native"],
"plugins": ["transform-decorators-legacy"]
}
Run Code Online (Sandbox Code Playgroud)
你能帮我解决这个问题吗?
默认情况下,React Native Babel 转换配置不包括对 ES7 装饰器的支持。
您可以通过首先安装装饰器包来添加它们:
npm install babel-plugin-transform-decorators-legacy --save-dev
Run Code Online (Sandbox Code Playgroud)
然后将插件添加到.babelrc项目根目录的文件中:
{
"presets": ["react-native"],
"plugins": ["transform-decorators-legacy"]
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
691 次 |
| 最近记录: |