javascript - 更新 React 应用程序中的状态,用新的排序对象数组替换旧数组

标签 javascript reactjs

我是 react 新手,刚刚开始学习。我正在尝试根据产品的价格对对象进行排序。但是当我尝试更新状态时,它不会改变,尽管当我执行 console.log() 时,我可以看到排序的产品,但它根本不会在屏幕上更新。我附上下面的代码。任何帮助将不胜感激。

当我打开应用程序时。我看到了我所有的产品。但是当我使用选择框对产品进行排序时,它只是向我显示未排序的相同产品。事件被触发。但我怀疑我更新状态的方式是错误的。


import './main.css'
import Filters from './components/Filters'
import Products from './components/Products'
import { useState } from 'react';


function App() {
  const [products,setProducts]=useState([
    {product_id:'1',product_name:"Razer Deathadder expert ergonomic mousepad",product_price:"20",product_path:"img/razer-deathadder-expert-ergonomic-original-imaf2z3xngbchfaz.jpeg"},
    {product_id:'2',product_name:"Zotac gtx 1080 graphics card",product_price:"320",product_path:"img/grap.jpg"},
    {product_id:'3',product_name:"Kingston 250 gb SSD ",product_price:"90",product_path:"img/ssd.jpg"},
    {product_id:'4',product_name:"Ryzen Processor",product_price:"250",product_path:"img/ry.jpg"}
    ]);


   let sortedProducts=[]
    const sortProducts=(e)=>{
      const sortBy=String(e.target.value);
      switch(sortBy){
      case 'plh': // sorting based on price low to high
      sortedProducts=products.sort((x,y)=>{
      return Number(x.product_price)-Number(y.product_price);
      });
      setProducts(sortedProducts); // I'm chaning the state here with my newly sorted array but its not rendering on screen
      break;
      case 'phl':
      sortedProducts=products.sort((x,y)=>{
      return Number(y.product_price)-Number(x.product_price);
      });
      setProducts(sortedProducts); // I'm chaning the state here with my newly sorted array but its not rendering on screen
      break;
      }
    }
   
  return (
    <div className="App">
      <div className="container">
      <Filters sortProducts={sortProducts}/>
      <Products products={products} />
      </div>
    </div>
  );
}

export default App;

这是产品组件

import Product from './Product'

function Products({products}) {
    return (
        <div className="product-container">
         {products.map(element => (
         <Product product={element}/>
    ))}
        </div>  
    );
  }
  
  export default Products;
  

最佳答案

您需要使用传播运算符将排序后的产品设置为状态

尝试:-

setProducts([...sortedProducts]);

参见Demo

关于javascript - 更新 React 应用程序中的状态,用新的排序对象数组替换旧数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67318338/

相关文章:

javascript - 在 jquery 中继器的 div 中附加图像

javascript - 如何让我的按钮返回所需的值

javascript - 如何从外部reactjs获取变量

reactjs - npm WARN babel-loader@6.2.8 需要 babel-core@^6.0.0 的同级,但没有安装

javascript - 如何重构我的 React 组件以接受一组错误,并在 error.show = true 对于其中任何一个错误时显示错误消息

javascript - 从对象数组中获取与给定值的所有重合

javascript - 如何使用 Jquery 访问 .html() 上的 html 元素?

JavaScript - 对数组

reactjs - React 应用程序拆分为 2 个应用程序

javascript - 如何显示群组消息