微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

React Native 和 MobX:useContext 不会将更改重新渲染到屏幕中

如何解决React Native 和 MobX:useContext 不会将更改重新渲染到屏幕中

我一直在尝试使用 mobX 来应用 React Native 功能组件。 所以我使用了这两个库 - mobx 和 mobx-react-lite。

我制作了一个简单的计数器应用程序,并且还使用了上下文挂钩。 增加该值后,它不适用于屏幕。但是,它出现在我的控制台上。 在我通过保存刷新代码显示更改(我没有更改代码

我该如何解决这个问题?

App.js

import { StyleSheet,Text,View,Button } from 'react-native';
import { CounterStoreContext } from './components/CounterStore';
  
import { observer } from "mobx-react-lite";
import React,{ useContext,useState } from "react";

const App = observer(() => {
  // const [count,setCount] = useState(0);
  const counterStore = useContext(CounterStoreContext)
  return (
    <View style={styles.container}>
      <Text style={styles.welcome}>Welcome</Text>
      <Text style={styles.text}>Just Press the damn button</Text>
      {/* <Text style={styles.text}>{count}</Text> */}
      {/* <Button title="Increase" onPress={()=>{setCount(count+1)}}/> */}
      <Text style={styles.text}>{counterStore.count}</Text>
      <Button title="Increase" onPress={()=>{
        counterStore.count++;
        console.log(counterStore.count)
        // setCount(counterStore.count)
      }}/>      
    </View>
  );
})

const styles = StyleSheet.create({
  container: {
    flex: 1,backgroundColor: '#fff',alignItems: 'center',justifyContent: 'center',},welcome:{
    fontSize: 20,fontWeight: 'bold',textAlign: 'center',text:{
    fontSize: 14,});

export default App;

CounterStore.js

import { observable,observe } from "mobx";
import { createContext } from "react";

class CounterStore {
    @observable count = 0;
}

export const CounterStoreContext = createContext(new CounterStore())

解决方法

Since MobX 6 the @observable decorator is not enough。您还需要在构造函数中使用 makeObservable / makeAutoObservable

class CounterStore {
    @observable count = 0;

    constructor() {
        makeAutoObservable(this);
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。