首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只有当我们使用Recat Hooks单击按钮两次而不是一次时,状态才会更新。

只有当我们使用Recat Hooks单击按钮两次而不是一次时,状态才会更新。
EN

Stack Overflow用户
提问于 2020-10-13 08:49:20
回答 1查看 37关注 0票数 0
  1. 我单击按钮时只需要显示最高值。但是在这里,只有当我们单击该按钮两次而不是一次时,状态才会被更新。
  2. ,我们可以使用ES6特性(比如filter方法)来做吗?在这里,我使用了一个for循环:

代码语言:javascript
复制
const [dataObject, setdataObject] = useState([{}]);
const [filterData, setfilterData] = useState({});

const showMillions = () => {
  // //console.log(dataObject);
  let x = 0;
  let name = '';
  for (let i = 0; i < dataObject.length; i++) {
    // console.log(dataObject);
    if (dataObject[i].money > x) {
      x = dataObject[i].money;
      name = dataObject[i].name;
    }
  }
  setfilterData(name);
  for (let i = 0; i < dataObject.length; i++) {
    if (filterData === dataObject[i].name) {
      setdataObject([dataObject[i]]);
    }
  }
};
<div><button className="btn btn-dark" onClick={showMillions} >Show Millionaires</button></div>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-13 09:37:36

您必须单击该按钮两次,因为setfilterData(name)是异步的。您可以在最后一个for循环中使用useEffect或使用name而不是filterData

代码语言:javascript
复制
const [dataObject, setdataObject] = useState([{}]);
const [filterData, setfilterData] = useState({});

useEffect(() => {
    // using filter
    setDataObject(dataObject.filter((item) => item.name === filterData));
}, [filterData]);

const showMillions = () => {
    // //console.log(dataObject);
    let x = 0;
    let name = '';

    for (let i = 0; i < dataObject.length; i++) {
        // console.log(dataObject);
        if (dataObject[i].money > x) {
             x = dataObject[i].money;
             name = dataObject[i].name;
        }
    }
    setfilterData(name);
  }
};
<div><button className="btn btn-dark" onClick={showMillions} >Show Millionaires</button></div>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64331797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档