RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 919673
Accepted
Юрий Королик
Юрий Королик
Asked:2020-12-14 02:33:13 +0000 UTC2020-12-14 02:33:13 +0000 UTC 2020-12-14 02:33:13 +0000 UTC

ReactJS - 数组及其通过道具修改

  • 772

我不知道如何分类书籍。在父块中,我创建了一个包含所有这些书籍的数组,然后我不明白如何单击按钮(其中有 4 个,每个都以自己的方式修改数组:一个完整​​显示它,第二个按评级排序,第三个按受欢迎程度排序,第四个仅显示免费书籍)在一个子组件中,将此修改后的数组传递给另一个子组件。我是新手,还不知道如何实现它......

javascript
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Denis Bubnov
    2020-12-14T22:37:21Z2020-12-14T22:37:21Z

    由于您没有在问题中提供代码,因此答案将基于具有最少代码的建议。所以,假设有一个父组件,其中有一个包含所有书籍的数组(一个平庸而简单的示例allBooks- 所有书籍(原始数组),filteredBooks- 一个过滤的书籍数组,假设整个书籍列表通过支柱):

    const books = [
      { ID: 1, Name: 'One', Author: 'Remark' },
      { ID: 2, Name: 'Two', Author: 'Burunov' },
      { ID: 3, Name: 'Three', Author: 'Romanov' },              
    ],
    

    假设我们有一组书籍,其中描述书籍的对象位于其中,并且该数组通过 prop 传递books给父组件,好吧,或者componentDidMount它是从某个地方加载的,但是很简单,我们将初始化我们的变量父状态:

    class ParrentComponent extends React.Component {
    
      constructor(props) {
        super(props);
    
        this.state = {
          allBooks: props.books,
          filteredBooks: props.books, // изначально можно пустой массив `[]`
        }
    
        // some code here...
    
      }
    
      // some code here...
    
    }
    

    假设我们有自己的过滤方法,我们也可以有一本参考书(如果是 Redux 会更方便),这些方法也会在父组件中,例如我会写一些东西:

    showAllBooks() {
      const { allBooks } = this.state;
      this.setState({ filteredBooks: allBooks });
    }
    
    filterByName(name) {
      const { allBooks } = this.state;
      const filteredBooks = allBooks.filter(book => book.Name === name)
      this.setState({ filteredBooks });
    }
    
    filterByAuthor(author) {
      const { allBooks } = this.state;
      const filteredBooks = allBooks.filter(book => book.Author === author)
      this.setState({ filteredBooks });
    }
    

    我会提请您注意,该方法Array.prototype.filter()会创建一个新数组,其中包含通过传递函数中指定的测试的所有元素,这是一种安全的方法,不会导致状态突变。

    现在让我们继续讨论您的子组件。第一个,据我了解,有带有过滤器的按钮,更准确地说,通过单击按钮,将显示一个或另一个数组。让我们将我们的方法的链接传递给这个子组件。第二个将包含一个带有过滤列表的道具。

    <ChildWithButtons
      showAllBooks={this.showAllBooks}
      filterByName={this.filterByName}
      filterByAuthor={this.filterByAuthor}
    />
    
    <ChildWithFilteredBooks
      filteredBooks={this.state.filteredBooks}
    />    
    

    在这个组件中,我们将附加一个用于单击按钮的处理程序,例如,来自渲染和处理一个按钮的片段(对于其他按钮,类似地):

    <button onClick={this.filterByName}>Filter by name</button>
    

    同一个组件将有自己的点击处理程序,并通过道具调用过滤方法。

    filterByName(event) {
      const name = 'One'; // для примера будет такое имя, его можно брать откуда угодно
      this.props.filterByName(name); // вызовем метод фильтрации из пропсы
    }
    

    单击按钮后,将调用 prop 中的方法,过滤数组并更新第二个子组件,该组件使用过滤后的数组,因为它的 prop 将被更新filteredBooks。因此,通过props一个父组件,您可以在其两个子组件之间进行通信。请注意,allBooks我们不会更改原始数组,而是将其用作过滤源。不要忘记构造函数内部的绑定,如果你突然需要this,但你需要它。

    阅读以下内容也很有用:

    • 反应组件
    • 组件和道具
    • 状态和生命周期
    • 1

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    是否可以在 C++ 中继承类 <---> 结构?

    • 2 个回答
  • Marko Smith

    这种神经网络架构适合文本分类吗?

    • 1 个回答
  • Marko Smith

    为什么分配的工作方式不同?

    • 3 个回答
  • Marko Smith

    控制台中的光标坐标

    • 1 个回答
  • Marko Smith

    如何在 C++ 中删除类的实例?

    • 4 个回答
  • Marko Smith

    点是否属于线段的问题

    • 2 个回答
  • Marko Smith

    json结构错误

    • 1 个回答
  • Marko Smith

    ServiceWorker 中的“获取”事件

    • 1 个回答
  • Marko Smith

    c ++控制台应用程序exe文件[重复]

    • 1 个回答
  • Marko Smith

    按多列从sql表中选择

    • 1 个回答
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Suvitruf - Andrei Apanasik 什么是空? 2020-08-21 01:48:09 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5