2

基于另一个商店初始化商店并将它们都放入的最佳实践是什么Provider?我有一家名为它的商店AuthManager,它拥有一个名为user. 我还有另一家商店叫GoalManager. 我需要初始化的user属性。我想这样构造:AuthManagerGoalManagerGoalManager

const goalManager = new GoalManager(user);

但是以后不可能在 react 的上下文中添加一些东西,因为有些孩子无法根据上下文的变化进行更新!我通过将AuthManager实例发送到GoalManager的构造函数解决了这个问题,但我不喜欢它:

// services.js

const authManager = new AuthManager();
const goalManager = new GoalManager(authManager);

export default {
  authManager,
  goalManager
}

然后:

// index.jsx

import services from './services';

render(`
  <Provider {...services}>
    <App />
  </Provider>`, mountPoint);

我不喜欢这个解决方案,因为我不得不依赖GoalManagerAuthManager它只依赖于AuthManager.user. 然后测试GoalManager更难(因为你必须模拟一个大对象)。

有没有更好的解决方案?

4

1 回答 1

0

也许是一种完全不同的思维方式,但这会解决你的问题。

看起来,这也对你有用:

// AuthManager.js
class AuthManager {
  @observable user;
}

export default new AuthManager();

只需在 GoalManager 中导入 AuthManager 即可使用AuthManger.user

// GoalManager.js

// import the AuthManager and use the user directly.
import AuthManager from './AuthManager'

class GoalManager {
  @computed get someThing() {
     if (AuthManager.user) {
       // your stuff..
     }
  }
}

export default new GoalManager();

在服务中,您将获得实例。

// services.js

import authManager from './AuthManager'
import goalManager from './GoalManager'

export default {
  authManager,
  goalManager
}

你明白了吗?

于 2017-01-05T10:17:30.770 回答