列表中的子项没有正确更新?(反应/预先)

胡安·伊格纳西奥·诺利·维拉尔

我有以下组成部分

import {h, Component} from 'preact'
import {getPersons} from '../../lib/datalayer'
import Person from '../person'
import {SearchInput} from '../search'

export default class Persons extends Component {
  state = {
    allPersons: [],
    persons: [],
    search: ''
  }

  async fetchData () {
    try {
      const allPersons = await getPersons()
      this.setState({allPersons: allPersons.slice(), persons: allPersons.slice()})
    } catch (error) {
      ....
    }
  }

  constructor (props) {
    super(props)
    this.state = {
      allPersons: [],
      persons: [],
      search: ''
    }
    this.fetchData()
  }

  onSearchInput = (search) => {
    if (search === '') {
      this.setState({search: search, persons: this.state.allPersons.slice()})
    } else {
      const persons = this.state.allPersons.filter(p => p.name.toLowerCase().includes(search.toLowerCase())).slice()
      this.setState({search: search, persons: persons)})
    }
  }

  render () {
    const {persons} = this.state
    return (
      <div>
        <SearchInput onInputChange={this.onSearchInput} placeHolder={'filter: name'} />
        {persons.map(p => <Person person={p} />)}
      </div>
    )
  }
}

该页面呈现“人员”列表,并且顶部具有过滤器。过滤器似乎工作正常,我通过做一个console.log的结果进行了测试

问题是,如果我的列表包含对象:

[{name: 'thomas'}, {name: 'john'}, {name: 'marcus'}, {name: 'usa'}]

然后在搜索输入中输入:“我们”

过滤器工作正常,结果是:

[{name: 'marcus'}, {name: 'usa'}] \\ (the expected result)

在页面中呈现此对象

[{name: 'thomas'}, {name: 'john'}] \\ (wrong, this are the two first elements of the list)

如果我搜索:“ joh”

筛选器的结果是

[{name: 'john'}] \\ (this is fine)

而且页面仅呈现

[{name: 'thomas'}] \\ (the first element in the list)

看起来可以渲染的元素数量还可以,但是列表子元素的内容不会被重新渲染。

我的代码有什么问题?

阿格尼

React使用keys列表的子项来确定哪些项已更改以及哪些项保持不变。由于您尚未指定key开机人员,因此它index成为关键。

当索引为关键时,您可以看到如何将列表缩短为两个项目,如何显示列表中的前两个项目(其他索引现在丢失)。要解决此问题,您必须在此人身上提供唯一的标识符作为键。

从您的对象来看,假设name是唯一的(通常不是):

 {persons.map(p => <Person person={p} key={p.name} />)}

为什么需要键-文档

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

列表项没有正确删除(反应)

来自分类Dev

条件 while 循环没有正确反应

来自分类Dev

获取LINQ列表中的所有子项

来自分类Dev

获取LINQ列表中的所有子项

来自分类Dev

HTML有序列表未显示子项正确

来自分类Dev

python中的列表理解没有正确评估

来自分类Dev

从表A中删除,其中表A中没有子项,表B中没有子项

来自分类Dev

反应谷歌地图没有更新

来自分类Dev

无法在没有子项的列表中选择一个

来自分类Dev

在具有可编辑子项的列表视图中正确处理子项编辑(或取消子项编辑)

来自分类Dev

Maven错误:“反应堆项目列表中没有SNAPSHOT项目。”

来自分类Dev

如何使用 JavaScript 在 DOM 元素中迭代所有子项,包括那些没有标记的子项

来自分类Dev

在使用钩子的反应中没有得到更新的状态值?

来自分类Dev

为什么观察者对我商店中的更新没有反应?

来自分类Dev

在ExpandableListView中更新子项

来自分类Dev

如果WPF中没有子项,则隐藏Expander ToggleButton

来自分类Dev

如果WPF中没有子项,则隐藏Expander ToggleButton

来自分类Dev

python没有在列表上正确迭代

来自分类Dev

反应-危险地SetInnerHTML没有显示正确的结果

来自分类Dev

PHP MySQL更新没有正确的价值

来自分类Dev

更新了表,但没有返回正确的值

来自分类Dev

NotifyDataSetChanged 没有正确更新 RecyclerView

来自分类Dev

setState 没有正确更新状态

来自分类Dev

ui 中的元素没有反应

来自分类Dev

反应 js 中没有反映 CSS

来自分类Dev

更新所有子项中的相同字段

来自分类Dev

在 Parent 中反应更改状态,是否将渲染调用作为迭代对其所有子项和子子项?

来自分类Dev

当我将列表视图用作滚动视图的子项时,我的列表视图没有滚动

来自分类Dev

反应避免所有子项重新呈现

Related 相关文章

  1. 1

    列表项没有正确删除(反应)

  2. 2

    条件 while 循环没有正确反应

  3. 3

    获取LINQ列表中的所有子项

  4. 4

    获取LINQ列表中的所有子项

  5. 5

    HTML有序列表未显示子项正确

  6. 6

    python中的列表理解没有正确评估

  7. 7

    从表A中删除,其中表A中没有子项,表B中没有子项

  8. 8

    反应谷歌地图没有更新

  9. 9

    无法在没有子项的列表中选择一个

  10. 10

    在具有可编辑子项的列表视图中正确处理子项编辑(或取消子项编辑)

  11. 11

    Maven错误:“反应堆项目列表中没有SNAPSHOT项目。”

  12. 12

    如何使用 JavaScript 在 DOM 元素中迭代所有子项,包括那些没有标记的子项

  13. 13

    在使用钩子的反应中没有得到更新的状态值?

  14. 14

    为什么观察者对我商店中的更新没有反应?

  15. 15

    在ExpandableListView中更新子项

  16. 16

    如果WPF中没有子项,则隐藏Expander ToggleButton

  17. 17

    如果WPF中没有子项,则隐藏Expander ToggleButton

  18. 18

    python没有在列表上正确迭代

  19. 19

    反应-危险地SetInnerHTML没有显示正确的结果

  20. 20

    PHP MySQL更新没有正确的价值

  21. 21

    更新了表,但没有返回正确的值

  22. 22

    NotifyDataSetChanged 没有正确更新 RecyclerView

  23. 23

    setState 没有正确更新状态

  24. 24

    ui 中的元素没有反应

  25. 25

    反应 js 中没有反映 CSS

  26. 26

    更新所有子项中的相同字段

  27. 27

    在 Parent 中反应更改状态,是否将渲染调用作为迭代对其所有子项和子子项?

  28. 28

    当我将列表视图用作滚动视图的子项时,我的列表视图没有滚动

  29. 29

    反应避免所有子项重新呈现

热门标签

归档