Reactjs 键在react redux应用程序中的作用和管理动态组件的状态

Reactjs 键在react redux应用程序中的作用和管理动态组件的状态,reactjs,redux,Reactjs,Redux,我基本上理解键的用途:我们需要能够识别孩子列表中的变化 我遇到的问题是信息流,以及在我的存储中的状态和子组件的状态之间保持同步 例如,假设我有一个列表,它听起来就是这样的。某个容器中包含文本输入。其中许多存储在一些元素中 列表中的CustomTextInputs的数量可以更改,可以添加和减少。我有一个带有递增计数器的工厂,每当插入CustomTextInput时,不管它放在哪里,它都会发出新的键 我有一个CustomTextInputModel类型,它填充了我的商店。每当我更改其中一个输入中的值

我基本上理解键的用途:我们需要能够识别孩子列表中的变化

我遇到的问题是信息流,以及在我的存储中的状态和子组件的状态之间保持同步

例如,假设我有一个
列表,它听起来就是这样的。某个容器中包含文本输入。其中许多存储在一些
元素中

列表中的
CustomTextInput
s的数量可以更改,可以添加和减少。我有一个带有递增计数器的工厂,每当插入CustomTextInput时,不管它放在哪里,它都会发出新的键

我有一个
CustomTextInputModel
类型,它填充了我的商店。每当我更改其中一个输入中的值时,它都需要调用一个回调来在我的存储中分派操作。但是,我如何知道要修改哪一个实例,以及如何确保整个列表不会因更改单个实例而重新启动,因为整个存储的状态正在重新创建?是否需要在每个
CustomTextInput
中存储对某个型号ID的引用?这应该是关键吗

许多银行,我在这方面很新:)

但是,我如何知道要修改哪一个,以及如何确保整个列表不会因为更改单个实例而重新呈现,因为整个存储的状态正在重新创建

如果组件绑定到redux存储中的对象列表,那么它将重新呈现整个列表,因为父级将获得新的道具。但是,有几种方法可以避免重新渲染

请注意,这是一篇相当高级的文章,但希望能有所帮助。我发现,在解释一种使react-redux应用程序在呈现大型列表时更高效的方法时非常有用,方法是将每个项连接到redux存储,并通过一个通过道具传入的id来监听自己

下面是另一篇很好的文章,说明了这一点:

减速器内部:

function items(state = {}, action) {
  switch (action.type) {
    case 'MARK':
      const item = state[action.id];
      return {
        ...state,
        [action.id]: {...item, marked: !item.marked}
      };
    default: return state;
  }
}

function ids(state = [], action) {
  return state;
}
在列表容器中:

<div>
  {
    ids.map(id => {
      return <Item key={id} id={id} />;
    })
  }
</div>

// Returns an array of just ids, not whole objects
function mapStateToProps(state) {
  return {id: state.ids};
}
我是否需要在每个CustomTextInput中存储对某个模型ID的引用

是的,当您想要修改特定项时,您需要某种类型的密钥/id来传递给redux操作

这应该是关键吗

在redux存储中引用中的内容最常见的方法是通过id

但是,我如何知道要修改哪一个,以及如何确保整个列表不会因为更改单个实例而重新呈现,因为整个存储的状态正在重新创建

如果组件绑定到redux存储中的对象列表,那么它将重新呈现整个列表,因为父级将获得新的道具。但是,有几种方法可以避免重新渲染

请注意,这是一篇相当高级的文章,但希望能有所帮助。我发现,在解释一种使react-redux应用程序在呈现大型列表时更高效的方法时非常有用,方法是将每个项连接到redux存储,并通过一个通过道具传入的id来监听自己

下面是另一篇很好的文章,说明了这一点:

减速器内部:

function items(state = {}, action) {
  switch (action.type) {
    case 'MARK':
      const item = state[action.id];
      return {
        ...state,
        [action.id]: {...item, marked: !item.marked}
      };
    default: return state;
  }
}

function ids(state = [], action) {
  return state;
}
在列表容器中:

<div>
  {
    ids.map(id => {
      return <Item key={id} id={id} />;
    })
  }
</div>

// Returns an array of just ids, not whole objects
function mapStateToProps(state) {
  return {id: state.ids};
}
我是否需要在每个CustomTextInput中存储对某个模型ID的引用

是的,当您想要修改特定项时,您需要某种类型的密钥/id来传递给redux操作

这应该是关键吗

在redux存储中引用中的内容最常见的方法是通过id