【问题标题】:How to Change Parent State from Child - Mobx State Tree?如何从子状态更改父状态 - Mobx 状态树?
【发布时间】:2018-06-04 22:32:10
【问题描述】:

我正在尝试使用 Mobx 状态树在 reactjs 中创建导航。

现在我有一个带有图标列表的瘦垂直导航栏。现在我想做的是向某些菜单项添加子菜单项。当这些被点击时,导航从瘦到宽(即扩展)并显示子菜单项。一旦用户点击其中一个,Nav 就会回到瘦版本。

我认为我需要的是一种方法,当在我的父商店中单击一个图标时,一个标志会设置为“展开”,但我不知道当一个孩子被点击时如何设置。

import { types } from "mobx-state-tree";
import NavItem from "./NavItem.js";
const NavStore = types
  .model("NavStore", {
    expanded: false,
    nav_items: types.array(NavItem)
  })
  .actions(self => ({}))
  .views(self => ({}))
  .create({

  });

export default NavStore;


import { types } from "mobx-state-tree";

const NavItem = types
  .model("NavItem", {
     expands: false,
     title: types.string
  })
  .actions(self => ({
    itemClicked() {

    }
  }))
  .views(self => ({}));

export default NavItem

【问题讨论】:

    标签: javascript reactjs mobx mobx-state-tree


    【解决方案1】:

    您需要导入 getParent 和(可选)hasParent 函数:

    import { types, getParent, hasParent } from ‘mobx-state-tree’
    

    然后在你的行动中调用父母的行动:

    if (hasParent(self)) {
      getParent(self).someAction(someParams);
    }
    

    【讨论】:

    • 我看到人们做 getParent(self, #)。与 getParent(self, 1) 之类的有什么区别
    • 第二个参数 - 深度(默认为 1)。所以你可以写 getParent(self, 2) 来获取父母的父母。我认为没有理由为深度写#,因为它应该是一个数字。
    • 我检查了源代码 (github.com/mobxjs/mobx-state-tree/blob/master/packages/…),如果第二个参数不是数字,似乎 getParent 应该引发异常。
    • 是的,但默认值为 1
    猜你喜欢
    • 2016-10-02
    • 2021-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-12
    • 1970-01-01
    • 2018-12-18
    • 1970-01-01
    相关资源
    最近更新 更多