mobxUseObserver没有在商店更新时重新渲染



我正在尝试使用MobX、TypeScript和react Hooks创建一个简单的react应用程序,在其中我将键入一个城市的名称,单击添加按钮,它将用新添加的城市更新UI中的城市列表。

此处的CodeSandbox演示

问题是,当我用一个城市的新名称点击添加按钮时,列表没有得到更新。

请帮助

您的代码有两个问题:

  1. 不要使用useLocalStore(context.tsx(创建存储,通过直接调用存储函数来创建存储,并将createStore函数(store.ts(的返回值包装在observable
// context.tsx
// const store = useLocalStore(createStore);
const store = createStore()
// store.ts
import { observable } from "mobx";
export const createStore = () => {
const store = observable({
Cities: ["Gotham"],
get allCities(): Array<string> {
return store.Cities;
},
get cityCount(): Number {
return store.Cities.length;
},
addCity: (city: string) => {
console.log("store: adding city: " + city);
store.Cities.push(city);
console.log(store.Cities);
}
});
return store;
};
export type TStore = ReturnType<typeof createStore>;

  1. CityView组件的返回值需要封装在mobx-react-liteuseObserver函数中
// city.tsx
import { useObserver } from "mobx-react-lite";
export const CityView: React.FC<{ cities: string[] }> = ({ cities }) => {
return useObserver(() => {
return (
<ul>
{cities.map((city: string) => (
<li key={city}>{city}</li>
))}
</ul>
);
});
};

代码沙箱

相关内容

  • 没有找到相关文章

最新更新