当前位置: 首页 > 知识库问答 >
问题:

在React中管理嵌套状态的好方法

苏高旻
2023-03-14

编辑:我重写了这个问题,以澄清我想要的--感谢到目前为止回复我的人,帮助我磨练它。

{
  'authors' : {
    234 : {
      'name' : 'Alice Ames',
      'bio' : 'Alice is the author of over ...',
      'profile_pic' : 'http://....'
    },
    794 : {
      'name' : 'Bob Blake',
      'bio' : 'Hailing from parts unknown, Bob...',
      'profile_pic' : 'http://....'
    },
    ...more authors...
 },
 'publications' : {
    539 : {
      'title' : 'Short Story Vol. 2',
      'author_ids' : [ 234, 999, 220 ]
    },
    93  : {
      'title' : 'Mastering Fly Fishing',
      'author_ids' : [ 234 ]
    },
    ...more publications...
  }
}

在这个人为的示例中,状态有两个主要区域,分别由authorspublications键访问。

authors键指向一个以作者ID为键的对象,该ID指向一个带有一些作者数据的对象。

publications键指向一个对象,该对象键控于具有某些发布数据的发布的ID以及一个作者数组。

...
<App>
  <AuthorList authors={this.state.authors} />
  <PublicationList authors={this.state.authors} publications={this.state.publications} />
</App>
...

...
class AuthorList extends React.Component {
  render() {
    let authors = this.props.authors;
    return (
      <div>
        { Object.keys( authors ).map( ( author_id ) => {
          return  <Author author={authors[author_id]} />;
        }
      </div>
    );
  }
}
...

...
class PublicationList extends React.Component {
  render() {
    let publications = this.props.publications;
    let authors = this.props.authors;
    return (
      <div>
        { Object.keys( publications ).map( ( publication_id ) => {
          return  <Publication publication={publications[publication_id]} authors=authors />;
        }
      </div>
    );
  }
}
...

从这个答案来看:

reactJS-是否在调用“setstate”时调用render?

React组件的render()函数将在其状态或其任何父级的状态发生变化时被调用-无论该状态变化是否与该组件的道具有关。可以使用ShouldComponentUpdate更改此行为。

共有1个答案

夹谷浩宕
2023-03-14

下面是一种使用对象扩展语法高效且可读的方法。

let state = {
    authors : {
        ...this.state.authors, 
        [ givenId ] : { 
            ...this.state.authors[ givenID ], 
            bio : newValue 
        }
    }  
}
this.setState(state)

请记住,在JSX中映射项时,必须传递一个“键”作为道具。

这主要是因为react所做的协调(react的“不同”算法来检查发生了什么变化)检查映射的jsx(大致命名为jsx)的键。

无论如何,在reacts state/SetState或redux中管理状态与“和解”无关。

在这两种情况下,您都可以使用“对象扩展语法”语法更改嵌套数据的部分。

您所关心的就是将“相同”的键传递给映射的JSX。因此,尽管react重新发送,但它不会尝试对不必要的部分进行dom更新,这是昂贵的。

 类似资料:
  • 问题内容: 所以,我有多个ReactComponent。最初,我以为会有一个带有其自身状态的父组件(简称为GrandPa),它将有关其状态的一些信息传递给另一个组件(称为Parent)。同样,父母将他的一些财产传给孩子,孩子则传给孙子。因此,我们具有层次结构: 爷爷->父母->孩子->孙子 但是,我很快意识到,当我使用method 更改GrandPa的状态时,所做的更改不会沿通道向下级联。我意识到

  • 问题内容: 我试图通过使用这样的嵌套属性来组织我的状态: 但是像这样更新状态 不起作用。如何正确完成? 问题答案: 为了创建嵌套对象,您可以按照以下方法进行操作,因为我认为setState无法处理嵌套更新。 这个想法是创建一个虚拟对象,对其执行操作,然后用更新的对象替换组件的状态 现在,散布运算符仅创建对象的一级嵌套副本。如果您的状态是高度嵌套的,例如: 您可以在每个级别使用传播运算符来设置状态,

  • 我正在尝试学习React(使用redux),所以我正在制作一个应用程序,在其中我可以创建训练计划,将训练添加到计划中,然后将训练添加到训练中。 PlanListComponent 我的PlansList组件为每个计划呈现一张卡片。在这张卡片中,它为该计划中的每个训练呈现一个训练列表。将训练添加到计划后,“计划列表”组件不会重新渲染。添加的训练仅在我刷新页面后显示。我之所以选择这种情况,是因为我必须

  • 我们正在热烈讨论如何在React中更新嵌套状态。国家是否应该是不可改变的?优雅地更新状态的最佳实践是什么? 假设你有这样的状态结构: 然后我们要更新乔·多伊的电话号码。我们有几种方法可以做到这一点: 将状态强制更新更改为重新加载 带变异状态的变异状态集合状态 Object.assign,这仍然会改变状态,因为new学生只是对this.state指向的同一对象的新引用 更新不变性助手(https:/

  • 本文向大家介绍在react中你是怎么进行状态管理的?相关面试题,主要包含被问及在react中你是怎么进行状态管理的?时的应答技巧和注意事项,需要的朋友参考一下 使用react-redux进行状态管理 使用redux-thunk中间件进行异步数据的处理

  • https://codesandbox.io/s/ww49ef?file=/TasksContext.js&utm_med... 模仿以上官网的示例:出现了 dispatch is not a function 报错?请问为何?