MobX,Store 不可用,请确保它是由某些提供商提供的

MobX,Store Is Not Available, Make Sure It Is Provided By Some Provider

注意:即使有一些与我类似的问题,我的情况也没有满意的答案!!!

在我的react-native项目中,我使用mobx作为状态管理。我的 Login.js 文件的某些部分如下所示:

       export default class Login extends React.Component {
          @observable isLogged = true;
        .
        .
        .
        .
    render() {
        return (
          <Provider store = {Login}>
            <View style={styles.container}>

            <TextInput
              style={styles.input}
              placeholder='Kullanıcı Adı'
              autoCapitalize="none"
              placeholderTextColor='white'
              onChangeText={val => this.onChangeText('username', val)}


       /> 
        .
        .
        .

我的 App.js 文件的某些部分如下所示:

    .
    .
    .

    @inject('store')
    @observer
    export default class App extends React.Component{
      // @action(self =>({
      //   changeControl(){console.log("CHANGE CONTROL CALISTI")}
      // }))  

      state = {
      control : false
     }
     render(){

        console.log("ISLOGGED DEGERI:" ,Login.isLogged)

        if (this.props.store.isLogged)
        {
          return (
            <AppDrawerNavigatorLogged/ >
          );
        }
        else
        {
          return (
            <AppDrawerNavigatorNotLogged/ >
          );
        }

      }

    }
    .
    .
    .

看起来,我有一个 isLogged 可观察变量,我在 Login.js 文件中使用了 Provider 和一个存储,我想在我的 [=28= 中使用 isLogged 可观察变量] 文件。然而,即使我在 Login.js 文件中使用 Provider,我也会收到如下错误:

错误:MobX 注入器:商店 'store' 不可用!确保它是由某个提供商提供的。

有没有人遇到过这个问题或者有什么想法? 谢谢...

您似乎遗漏了 mobxmobx-react 的一些核心概念。我建议首先修复一些错误:

  • <Provider> 组件应该包装你的整个应用程序。在大多数情况下,它围绕 <App> 组件 (<Provider store={loginStore}><App/></Provider>)
  • Login 在您的情况下是 React.Component - 这是不对的。您需要创建一个 Login class 并将其实例传递给 Provider

示例:

class Login {
    @observable isLogged = true;

    // some methods for log in
}

const loginStore = new Login();

class App extends React.Component {
...

   render(){
       return (
           <Provider store={loginStore}>
               <App />
           </Provider>
       ) 
   }
}