javascript - React - 如何过滤列表而不丢失数据?

标签 javascript reactjs

我能够过滤列表以显示我想要的项目。问题是,我的过滤方法实际上改变了列表,而不仅仅是显示我想要的项目。我相信这是因为我实际上使用 setState 来完成过滤,所以我需要使用一种方法来保留原始列表并简单地实现过滤器而不是更改状态。

这是我用来过滤的函数的代码:

  filAll = () => {
    this.setState({
      todos: this.state.todos
    });
  }

  filActive = () => {
    this.setState({
      todos: this.state.todos.filter(todo => !todo.completed)
    });
  }

  filComplete = () => {
    this.setState({
      todos: this.state.todos.filter(todo => todo.completed)
    });
  }

有人提到我需要在 props 中提供完整的列表,而不是在 state 中,但我不太明白这意味着什么或如何实现它。

谢谢。

最佳答案

您可以在渲染函数内执行过滤器,而不更新状态。然后,您可以在渲染时访问过滤后的状态,但永远不会修改原始状态。

class myComponent extends React.Component {
    render() {
        let filteredComplete = this.state.todos.filter(todo => todo.completed)
        // Use the filtered state here
        return ...
    }
}

关于javascript - React - 如何过滤列表而不丢失数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61068288/

相关文章:

node.js - react-bootstrap 不包含 css

javascript - 如何更改 img 网址? (与/类)

javascript - React render-pdf open in new page onclick 慢问题

javascript - 如何防止 '&'在js中显示为 '&amp'

javascript - 脚本创建的元素无法被另一个脚本识别

javascript - 将 Prop 传递给 React 搜索栏的目的是什么?

javascript - 为什么我的状态计数器比它应该的值少一个值?

reactjs - 页面刷新时 Firebase onAuthStateChange 返回未定义

Javascript cookies - 检查cookie是否存在

javascript - jQuery:切换--> 仅打开一项并折叠其他同级项