mobx-react 相关问题

MobX是经过实战考验的库,可使状态管理变得简单且可扩展

React/Mobx 无法覆盖 Props 设置的默认值

这可能是“基本(缺乏)理解”问题之一。我正在进入 React,并致力于我的第一个主要应用程序,并且遇到了一个问题。 本质上是...

回答 1 投票 0

MobX React - 更新对象数组的单个索引会重新渲染所有子对象

我有一个 mobx 对象存储,这些对象显示在列表视图中,并在存储值上有一个地图,如下所示: {ObjectStore.objects.map((obj, 索引) => 我有一个 mobx 对象存储,这些对象显示在列表视图中,并在存储值上有一个地图,如下所示: {ObjectStore.objects.map((obj, index) => <ObjectItem key={obj.id} obj={obj} objIndex={index} ...unrelated UI Pros /> )} 在 ObjectItem 中有一个 onClick 处理程序,它向该特定对象添加一些新内容: const handleClick = () => { ObjectStore.updateObjectbyIdx(objIndex, newData) } 在商店 updateObjectbyIdx (index, data) { this.objects[index] = { ...this.objects[index], ...data} } 两个 React 组件都包装在观察者中。当句柄单击运行时,它会导致父容器重新呈现,然后所有 ObjectItem 组件重新呈现,即使附加数据仅通过索引添加到单个项目。 最初我完全避免使用索引并使用地图更新它,如下所示: updateObjectbyId (id, data) { this.objects = this.objects.map(obj => obj.id === id ? { ...obj, ...data} : obj }) } 但我假设由于这是创建一个新的数组引用,因此父容器观察ObjectStore.objects重新渲染。 切换到索引让我期望父级不会重新渲染,因为主数组引用仍然存在,并且由于我在最新点解构了值,因此只有单个 ObjectItem 会重新渲染。 我最终确实让它发挥作用: updateObjectbyIdx (index, data) { Object.keys(data).forEach(dataKey => { this.objects[index][dataKey] = data.dataKey } } 但是,当我只想更新数组中单个对象中的数据时,这似乎是一个奇怪的解决方法。 这样做: updateObjectbyIdx (index, data) { this.objects[index] = { ...this.objects[index], ...data} } 您还更新了对该对象的引用,并且由于父组件使用该对象,它将重新渲染。 您可以这样做 Object.assign:,而不是最后一个解决方案(实际上,这是正确且很好的) updateObjectbyIdx (index, data) { Object.assign(this.objects[index], data) } 这将保留引用并仅更新属性。只需记住深层嵌套的属性、对象、数组即可。要处理它们,您最好使用某种 mergeDeep 函数,Object.assign 不会进行合并,它基本上会覆盖您在自定义循环中所做的所有内容。

回答 1 投票 0

使用 useEffect() 的 Mobx 未在组件中渲染数据

我是 React 和 Mobx 的新手。 我想通过 useEffect() 中 GET 请求的数据来初始化组件。 mobx 存储有简单的组件: 从“mobx”导入{autorun}; 导入反应,{

回答 1 投票 0

如何在 Mobx 中迭代数组而不触发“在不读取任何可观察值的情况下创建/更新派生‘观察者’”。警告

我正在使用: "mobx": "^6.6.2", "mobx-react-lite": "^3.4.0", 想要对我的 .tsx 中的商店数组执行一个简单的 .map (.items 的类型为 MenuStore[]) {

回答 1 投票 0

传递到端点的变量正在返回值并同时取消定义

getFoodTemplate(订阅持续时间:任意,menuId:任意){ const request = createAxiosInstance(this.token); runInAction(() => (this.loading.getFoodTemplate = true)); 请求`输入代码...

回答 1 投票 0

Mobx makeAutoObservable 不绑定这个

我用一个简单的 MobX 商店构建了一个基本的计数器 React 应用程序。我能够使用 makeObservable 创建可观察的 MobX 状态,但由于某种原因,当我尝试使用 makeAutoObservable 时,我得到了...

回答 3 投票 0

MobX - 类组件内的反应

今天我开始使用 MobX,遇到的第一个问题是如何在 Observable 更新时执行 React 类组件中的函数。 我的印象是我们可以实现这一点......

回答 1 投票 0

超出最大更新深度,React 限制嵌套更新数量,防止无限循环

我有下面的代码,它给出了类似的错误 [mobx] 遇到由反应或观察者组件引发的未捕获异常,位于:'Reaction[ScratchPadComparison#9165.render()]' Err...

回答 1 投票 0

mobx React 并未更新每个进度条

我有一个具有 mvvm 架构的应用程序,我想通过上传文件向用户展示 Ui 中的进度。 我从我的 api 获取进度,并且可以将其实时发送到我的 mobx 商店。这是它

回答 1 投票 0

无法用 mobx 存储中的对象替换状态

我正在尝试用一个对象替换 mobx store 道具。问题是我希望它一开始是非初始化的——但是当我更新 prop(它在代码中称为协议)时,mobx 似乎不知道...

回答 1 投票 0

如何原子更新 mobx observables?

我有一个商店 myStore,它有一个 main 方法,它调用多个在 mobx 中设置 observale 值的方法。我的问题是我想在所有

回答 1 投票 0

在 React useMemo 中使用 mobx 存储中的方法

我有一个 MobX Store,其中包含用户角色信息和验证角色的方法: 类商店{ 构造函数(){ 使自动观察(这个) } 作用: string = "&quo...

回答 1 投票 0

Mobx/React Native:执行操作时状态不会更新

我目前正在使用 Mobx 6.9.0 和 React Native/Expo 创建示例应用程序。 这是我当前的设置: 应用程序.tsx 从'expo-status-bar'导入{StatusBar}; 导入 { 样式表,T ...

回答 0 投票 0

我想使用一个组件生命周期方法,在渲染前初始化。

我想在render()之前使用React组件生命周期方法来更新我的mobx状态,但他们说UNSAFE_componentWillMount将被废弃,不应该使用。他们说UNSAFE_componentWillMount将被废弃,不应该使用。那么我应该使用什么呢?

回答 1 投票 0

我可以在两个不同的组件中使用一个mobx商店吗?

我有一个topTabNavigator模块,它用mobx provider包装了商店: export class ModuleTeam extends Component { render() { return ( ...

回答 1 投票 0

如何在componentDidUpdate中跟踪mobx全局商店的变化。

我正在使用react+mobx+mobx-react库玩。我已经创建了mobx商店来存储应用程序设置(appSettingsStore)。我的react应用有2个组件即AppHeader & AppBody。该...

回答 1 投票 0

mobx动作绑定和状态变化的问题。

我有一些代码,在最初加载或刷新屏幕时,应该从API重新加载数据。当我使用mobx重新实现时,加载动画停止清除。当我重写代码...

回答 1 投票 0

简单的MobX Observable不渲染

我有一个简单的React类,用MobX @observer注解和一个简单的数据结构(用@observable data = { ...注解)。}. 一个动作更新了这个结构,但没有渲染。这里...

回答 1 投票 0

将mobx可观察对象作为道具传递给反应组件是否安全?

比如说,我有一个产品模型,它有10多个属性,其中一些也是对象。{ "product": { "name": "鞋子", "品牌": "......", "类别": { "abc": { ... } ...

回答 1 投票 1

我可以创建一个在React渲染函数内部计算的mobx以像useMemo()一样使用吗?

我想知道如何在useMemo挂钩中使用可观察到的mobx。我知道我可以将所有可能的依赖项传递给该钩子,但这可能会造成混乱:const MyComponent = observer((...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.