首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >美孚。父组件没有重新呈现吗?

美孚。父组件没有重新呈现吗?
EN

Stack Overflow用户
提问于 2022-08-18 07:08:19
回答 1查看 89关注 0票数 1

我在学黑帮。我不明白为什么不重新呈现父组件.单击按钮时,观察到的对象中字段的值将发生变化。父组件是一个观察者。为什么没有更新?我做了两个版本:只有mobx和mobx状态树。都不管用。

美孚

代码语言:javascript
复制
import React, { useContext , createContext} from 'react'
import { observer} from 'mobx-react-lite';
import { observable } from 'mobx'


const TestOb = observable({
    Name: 'Test'    
});

const StoreContext = createContext(TestOb);

const ChildComp = () => {
    const store = useContext(StoreContext)
    const clickHandle = () => {     
        store.Name = "Test 2";       
    }
    return (
        <div>
            <button onClick={clickHandle}>Click</button>
        </div>
    )
}

 const Test = () => {

    console.log("Test comp"); // does not fire on change
    
    return (
        <StoreContext.Provider value={TestOb}>
            <div>
                <ChildComp />
            </div>
        </StoreContext.Provider>
    )
}

export default observer(Test);

mobx状态树

代码语言:javascript
复制
import React, { useContext, createContext } from 'react'
import { observer, types } from 'mobx-react-lite';
import { observable } from 'mobx'
import { types } from 'mobx-state-tree'


const TestStore = observable(types.model({
    Name: types.maybe(types.string)
}).actions(self => {
    return {
        setName: () => { self.Name = "Test" }
    }
}))
const store = TestStore.create({});

const StoreContext = createContext(store);


const ChildComp = () => {
    const store = useContext(StoreContext)
    
    const clickHandle = () => {
        store.setName();
    }
    return (
        <div>
            <button onClick={clickHandle}>Click</button>
        </div>
    )
}

const Test = () => {
    console.log("Test"); // does not fire on change
    return (
        <StoreContext.Provider value={TestOb}>
            <div>
                <ChildComp />
            </div>
        </StoreContext.Provider>
    )
}

export default observer(Test);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-18 07:43:08

当可观察到的数据依赖于更改时,observer组件将重新呈现。

您的Test组件目前没有取消引用任何可观察的数据。您可以尝试使用TestOb.Name来确保它的工作。

示例

代码语言:javascript
复制
const Test = () => {
  console.log("Test comp");

  return (
    <StoreContext.Provider value={TestOb}>
      <div>
        {TestOb.Name}
        <ChildComp />
      </div>
    </StoreContext.Provider>
  );
};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73398737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档