首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多次响应提升状态以过滤组件

多次响应提升状态以过滤组件
EN

Stack Overflow用户
提问于 2022-09-28 03:31:50
回答 1查看 36关注 0票数 0

组件关系图:

代码语言:javascript
复制
"Main"
|--"Side"--"CategoryPicker"
|
|--"ItemBoard"

categoryPicker获取选定的值。

代码语言:javascript
复制
    const filterResultHandler = (e) => {
    props.onFilterChange(e.target.value);}
    ...
    onChange={filterResultHandler}

并将该值提升到Side

代码语言:javascript
复制
   const [filterState, setFilterState] = useState("all");    
   const onFilterChangeHandler = () => { props.onPassData(setFilterState);};

   ...

   <CategoryPicker selected={filterState} onFilterChange={onFilterChangeHandler} />

然后重复一遍,将值提升到Main。(到目前为止,我已经得到了console.log的值,而且它似乎还可以。)

代码语言:javascript
复制
  const [recData, setRecData] = useState("all");

  const onFilterChangeHandler = (passedData) => {
  setRecData(passedData);};

  <Side onPassData={onFilterChangeHandler} selected={recData} />

然后把它传递给Itemboard作为道具。

代码语言:javascript
复制
<ItemBoard items={items} recData={recData} />

ItemBoard中,我尝试过滤数组,然后与以后的映射进行比较,并显示过滤过的组件。

代码语言:javascript
复制
 const filteredProducts = props.items.filter((product) => {
 return (product.cat.toString() === props.recData)})

 {filteredProducts.map((product, index) => (
 <Item cat={product.cat} />
 ))}

警告:不能在呈现不同组件(Main)时更新组件(Side)。在setState中定位坏的Main ()调用

我在哪里失去我的逻辑?PS。试着专注于理解提升和传递道具是如何工作的,而不是寻找更好的解决问题的方法。

EN

回答 1

Stack Overflow用户

发布于 2022-09-28 03:50:20

在这段代码中使用了糟糕的setState:

代码语言:javascript
复制
const [recData, setRecData] = useState("all");
    
      const onFilterChangeHandler = (passedData) => {
      setRecData(passedData);};
    
      <Side onPassData={onFilterChangeHandler} selected={recData} />

为什么要将此selected={recData}数据再次传递给侧组件,您将从侧组件更新主组件的状态,并再次传递selected={recData},删除此数据,然后重试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73875931

复制
相关文章

相似问题

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