简体   繁体   English

如何使用 react.usememo 使用 react 和 javascript?

[英]How to use react.usememo using react and javascript?

i am doing some filtering on items based on ids which is in selection object.我正在根据选择 object 中的 id 对项目进行一些过滤。 and then evaluating true or not based on its completion true or false from items which is an array of objects.然后根据作为对象数组的项目的完成真或假来评估真或假。

below is my code,下面是我的代码,

const Items: React.FC<RouteComponentProps> = ({history}) => {
    const [{selection}] = tableState;
    const {
        data: items,
        count: itemsCount,
    } = React.useMemo(() => {
        (!isNil(data) ? data.items : { data: [], count: 0}),
        [data]
    );


    let noJobs; 
    if (selection) { //how to put this block in useMemo
        const filteredItems = items.filter(item =>
            Object.keys(selection).includes(item.id)
        );
        noJobs = filteredItems.map(item => item.jobs.map(job => job.completed))
                     .flat().every(Boolean); 
    }


    return (
        <button disabled = {noJobs}> Click me </button>
    );
}

How can i put the block which includes noJobs calcualtion (from if(selection)) to React.useMemo.我如何将包含 noJobs calcualtion 的块(来自 if(selection))放入 React.useMemo。 could someone help me with this.有人可以帮我解决这个问题。 I am learning react and hooks is new to me.我正在学习反应,钩子对我来说是新的。

thanks.谢谢。

Try followings it:尝试以下:

const Items: React.FC<RouteComponentProps> = ({history}) => {
    const [{selection}] = tableState;
    const {
        data: items,
        count: itemsCount,
    } = React.useMemo(() => {
        (!isNil(data) ? data.items : { data: [], count: 0}),
        [data]
    );


    const noJobs = React.useMemo(() => {
      if (selection) {
        const filteredItems = items.filter(item => {
          return Object.keys(selection).includes(item.id)
        });

        return filteredItems.map(item => item.jobs.map(job => {
          return job.completed
        }))
        .flat()
        .every(Boolean); 
      };

      return undefined; //or everything you want
    } , [items , selection]);

    return (
        <button disabled = {noJobs}> Click me </button>
    );
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM