使用React.Component样式将过滤后的列表传递给同级

不确定

有一个问题-下面的App函数具有一个'filteredUsers'方法,该方法每次通过时都会执行-因此,当设置了搜索状态时,它实际上将运行该方法,其结果将作为道具传递给'List'函数组件,一切都很好。如何将其更改为较旧的React.Component样式,使其仍然有效?(按照我下面的尝试)

const App = () => {
    const [text, setText] = React.useState('');
    const [search, setSearch] = React.useState('');

    const handleText = (event) => {
        setText(event.target.value);
    };

    const handleSearch = () => {
        setSearch(text);
    };

    console.log('*** App ***');         // each time as I type this is shown

    const filteredUsers = users.filter((user) => {
        console.log('Filter function is running ...');      // each time this is shown
        return user.name.toLowerCase().includes(search.toLowerCase());
    });

    return (
        <div>
            <input type="text" value={text} onChange={handleText} />
            <button type="button" onClick={handleSearch}>
                Search
            </button>

            <List list={filteredUsers} />
        </div>
    );
};

const List = ({ list }) => {
    return (
        <ul>
            {list.map((item) => (
                <ListItem key={item.id} item={item} />
            ))}
        </ul>
    );
};

const ListItem = ({ item }) => {
    return <li>{item.name}</li>;
};

然后,在等效的React.Component(App3)中,我正在尝试这样
现在,当我按下搜索按钮时,如何获取传递到List组件的过滤列表?

class App3 extends React.Component {
    state = {
        text: '',
        search: '',
    }
    handleText(event) {
        this.setState({ text: event.target.value });
    }
    handleSearch() {
        this.setState({ search: this.state.text });
    }
    filteredUsers = users.filter((user) => {
        console.log('Filter function is running ...');
        return user.name.toLowerCase().includes(this.state.search.toLowerCase());
    });
    render() {
        return (
            <div>
                <input type="text" value={this.state.text} onChange={this.handleText.bind(this)} />
                <button type="button" onClick={this.handleSearch.bind(this)}>
                    Search
                </button>

                <List list={this.filteredUsers} />
            </div>
        )
    }
}
devserkan

在第一个版本中,由于组件已渲染,因此filteredUsers变量在每个渲染中都会更新,因此您将获得过滤后的数据。您也可以useMemo在那里使用它,使其变得更好一些。

在您的第二个(类组件)版本中,此变量未更新。因此,您可以使其成为一个函数并调用它以传递listprop:

filteredUsers = () => // make function
  users.filter((user) => {
    console.log("Filter function is running ...");
    return user.name.toLowerCase().includes(this.state.search.toLowerCase());
  });

render() {
  return (
    <div>
      <input
        type="text"
        value={this.state.text}
        onChange={this.handleText.bind(this)}
      />
      <button type="button" onClick={this.handleSearch.bind(this)}>
        Search
      </button>

      <List list={this.filteredUsers()} /> // invoke
    </div>
  );
}

或者您可以将其移入render方法并分配给变量:

render() {
  const filteredUsers = users.filter((user) => {
    console.log("Filter function is running ...");
    return user.name.toLowerCase().includes(this.state.search.toLowerCase());
  });

  return (
    <div>
      <input
        type="text"
        value={this.state.text}
        onChange={this.handleText.bind(this)}
      />
      <button type="button" onClick={this.handleSearch.bind(this)}>
        Search
      </button>

      <List list={filteredUsers} />
    </div>
  );
}

但是,如果不是强制性的,则应使用第一个版本,因为类组件已不再是新组件的使用方式。

这是带有的版本useMemo

const filteredUsers = React.useMemo(
  () =>
    users.filter((user) => {
      console.log("Filter function is running ..."); // each time this is shown
      return user.name.toLowerCase().includes(search.toLowerCase());
    }),
  [search]
);

在这种情况下,仅在search更改时才评估此变量,而不是在每个状态更改时才求值

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将过滤后的查询集从列表视图传递到另一个使用 PDFTemplateView 进行打印的视图?

来自分类Dev

React:将数据从通用“数据提供程序”过滤器传递给同级的最佳方法

来自分类Dev

React-将ref传递给同级

来自分类Dev

无法使用%in%将列表传递给dplyr过滤器

来自分类Dev

angularjs:将过滤后的数组传递给指令

来自分类Dev

angularjs:将过滤后的数组传递给指令

来自分类Dev

AngularJS将过滤后的值传递给作用域值

来自分类Dev

过滤输出并使用bash将过滤后的数据推入数组

来自分类Dev

React-Typescript将动态值传递给同级?

来自分类Dev

将表单输入的值传递给React中的同级组件

来自分类Dev

在react中如何使用可重用组件作为React Component传递给react-router-dom Component属性?

来自分类Dev

在react中如何使用可重用组件作为React Component传递给react-router-dom Component属性?

来自分类Dev

如何使用React-Window输入传递给Row函数的索引和样式道具

来自分类Dev

使用React钩子将数据传递到同级组件?

来自分类Dev

使用 React 嵌套列表

来自分类Dev

如何使用{children}将React Component prop传递给子函数?

来自分类Dev

React TS-将类型传递给样式化组件

来自分类Dev

将道具传递给Typescript中的React样式的组件

来自分类Dev

React - 将计算样式传递给 div 的语法

来自分类Dev

使用React Native的Flexbox样式

来自分类Dev

如何将过滤器传递到Angular指令中要使用的angular指令中?

来自分类Dev

AngularJS Firebase数据库使用ngTableParams将过滤后的数据重复到ngtable中

来自分类Dev

如何将参数传递给过滤器方法并使用不同的参数在 React onClick 事件中调用函数?

来自分类Dev

我可以在PostCss样式内使用react component属性吗

来自分类Dev

我可以在PostCss样式内使用react component属性吗

来自分类Dev

使用Colum将列表传递给UDF

来自分类Dev

使用react-select将值传递给状态

来自分类Dev

如何使用传递给 React 类的“数据-”道具?

来自分类Dev

使用 React 将索引作为状态传递给组件

Related 相关文章

  1. 1

    如何将过滤后的查询集从列表视图传递到另一个使用 PDFTemplateView 进行打印的视图?

  2. 2

    React:将数据从通用“数据提供程序”过滤器传递给同级的最佳方法

  3. 3

    React-将ref传递给同级

  4. 4

    无法使用%in%将列表传递给dplyr过滤器

  5. 5

    angularjs:将过滤后的数组传递给指令

  6. 6

    angularjs:将过滤后的数组传递给指令

  7. 7

    AngularJS将过滤后的值传递给作用域值

  8. 8

    过滤输出并使用bash将过滤后的数据推入数组

  9. 9

    React-Typescript将动态值传递给同级?

  10. 10

    将表单输入的值传递给React中的同级组件

  11. 11

    在react中如何使用可重用组件作为React Component传递给react-router-dom Component属性?

  12. 12

    在react中如何使用可重用组件作为React Component传递给react-router-dom Component属性?

  13. 13

    如何使用React-Window输入传递给Row函数的索引和样式道具

  14. 14

    使用React钩子将数据传递到同级组件?

  15. 15

    使用 React 嵌套列表

  16. 16

    如何使用{children}将React Component prop传递给子函数?

  17. 17

    React TS-将类型传递给样式化组件

  18. 18

    将道具传递给Typescript中的React样式的组件

  19. 19

    React - 将计算样式传递给 div 的语法

  20. 20

    使用React Native的Flexbox样式

  21. 21

    如何将过滤器传递到Angular指令中要使用的angular指令中?

  22. 22

    AngularJS Firebase数据库使用ngTableParams将过滤后的数据重复到ngtable中

  23. 23

    如何将参数传递给过滤器方法并使用不同的参数在 React onClick 事件中调用函数?

  24. 24

    我可以在PostCss样式内使用react component属性吗

  25. 25

    我可以在PostCss样式内使用react component属性吗

  26. 26

    使用Colum将列表传递给UDF

  27. 27

    使用react-select将值传递给状态

  28. 28

    如何使用传递给 React 类的“数据-”道具?

  29. 29

    使用 React 将索引作为状态传递给组件

热门标签

归档