mirror icon indicating copy to clipboard operation
mirror copied to clipboard

我定义了一个models目录里面创建了命名空间为app的model用于存放一些数据,但如何调用?

Open DaybreakH opened this issue 8 years ago • 3 comments

如题,在组件中如何获取model的初始化参数及reducers中的方法。跨组件使用actions并没有出现app命名空间中的reducers 方法

DaybreakH avatar Oct 06 '17 11:10 DaybreakH

`import React, { Component } from 'react'; import { Spin, Layout, Button } from 'antd'; import { withRouter, connect, actions } from 'mirrorx'; import app from '../models/app';

class App extends Component {

render() { console.log( this.props ); console.log( actions ); return ( <div className="container"> holle,mirror ); } }

export default withRouter(connect(({ app }) => ({ app }))(App));`

我这么导入,之前的 actions 和 参数问题解决了。但是有没有更优雅的办法,比如怎么全局注册model ? 不导入model 的情况下不能使用 actions.app.add(1) 这种方式去调用吗? 刚上手react 对中间的机制不是特别理解,希望能帮我解惑,这对我来说非常重要。感谢

DaybreakH avatar Oct 06 '17 14:10 DaybreakH

目前,所有通过 Mirror 来管理的 Redux state,都需要通过 mirror.model 来“注入”。因此也没有“全局 model”的概念。

如果你的部分数据不想通过 Mirror 管理(即不使用 actions[modelName][actionName] 来 dispatch),那么你可以定义一个标准的 redux reducer,通过 mirror.defaults 方法指定,然后手动调用标准的 dispatch 方法,也可以过在 connect 里传 mapDispatchToProps 处理。

llh911001 avatar Oct 08 '17 02:10 llh911001

非常感谢你的回答,对我很有帮助。 所有通过 Mirror 来管理的 Redux state,都需要通过 mirror.model 来“注入”。 我现在的办法是在入口index.js中: import React from 'react'; import Mirror, { connect, render, Router, Route, Link } from 'mirrorx'; import App from './router'; import './models'; import registerServiceWorker from './registerServiceWorker';

Mirror.defaults({ historyMode: 'hash' })

render(<App/>, document.getElementById('root'));

registerServiceWorker();

通过import 导入models的index文件:

const context = require.context('./', true, /.js$/); const keys = context.keys().filter(item => item !== './index.js'); const models = keys.map(key => context(key), []); export default models;

这样全局注册model。 文档中的api都可以调用,这么使用我不清楚对不对。 如果不使用这种方法是不是在组件中如果想使用reducers、effects、actions或者this.props 都需要 import 对应的model才可以

DaybreakH avatar Oct 08 '17 07:10 DaybreakH