Javascript 如何在React Redux应用程序中实现涨价和降价排序?

Javascript 如何在React Redux应用程序中实现涨价和降价排序?,javascript,reactjs,redux,react-redux,Javascript,Reactjs,Redux,React Redux,朋友们,一天中所有的好时光,你都需要通过涨价和降价来实现货物的分类。如何写这样一个动作。?我尝试使用sort方法编写对象数组的排序。数组本身是在存储中创建的,使用React hook useffect作为useffect中的第二个参数,我传递了这个相同的数组,但是只有当我们转到篮子时才会发生重绘,并且在实时情况下,我们看不到重绘。告诉我我做错了什么?以下是将产品加载到商店并呈现它们的组件本身: function Home() { const books = useSelector(sta

朋友们,一天中所有的好时光,你都需要通过涨价和降价来实现货物的分类。如何写这样一个动作。?我尝试使用sort方法编写对象数组的排序。数组本身是在存储中创建的,使用React hook useffect作为useffect中的第二个参数,我传递了这个相同的数组,但是只有当我们转到篮子时才会发生重绘,并且在实时情况下,我们看不到重绘。告诉我我做错了什么?以下是将产品加载到商店并呈现它们的组件本身:

function Home() {
    const books = useSelector(state=>state.books.books);
    const isFetched = useSelector(state=>state.books.isFetched);
    const dispatch = useDispatch();

    useEffect(()=>{
      if(!books.length ){
        dispatch(setBooks())
      } 
    },[books]
);
    

    return (
       
      <Card.Group itemsPerRow={5}>
                {!isFetched ?  <Loader/> : books.map(i=>(<Books title = {i.title}
                 key={i.id}
                 author={i.author} 
                 image={i.image} 
                 price={i.price}
                 rating={i.rating}
                 />))}
        </Card.Group>
    );
}
函数Home(){
const books=useSelector(state=>state.books.books);
const isFetched=useSelector(state=>state.books.isFetched);
const dispatch=usedpatch();
useffect(()=>{
如果(!books.length){
调度(setBooks())
} 
},[书籍]
);
返回(
{!isFetched?:books.map(i=>())}
);
}
这是一个减速机,其中记录了分拣和将货物装入仓库的链接:

const initialState = {
    books: [],
    isFetched: false,
}

export const SET_BOOKS = 'SET_BOOKS';


export const setBooks = (books) =>{
    return async dispatch => {
        const response = await fetch('http://localhost:3000/books');
        const json = await response.json();
        dispatch({
            type: SET_BOOKS,
            payload: json
        });
    }
 }
  
 const SET_FILTER_LOWER = 'SET_FILTER_LOWER';

 export const setFilter = filter => ({
   type: SET_FILTER_LOWER,
   payload: filter,
 });

 export const setBooksReducer = (state = initialState, action) =>{
     switch(action.type){
        case SET_BOOKS:
            return {...state, 
                books: state.books.concat(action.payload),
                isFetched: true
            }
        case SET_FILTER_LOWER:
        return {
          ...state,
          books: action.payload.sort((a,b)=>a.price-b.price)
        //   books: action.payload.filter((el)=>el.price<=300)
        };
        default: 
        return state

     }
      
}
const initialState={
书籍:[],
isFetched:false,
}
export const SET_BOOKS='SET_BOOKS';
导出const setBooks=(书籍)=>{
返回异步调度=>{
const response=等待获取('http://localhost:3000/books');
const json=await response.json();
派遣({
类型:套书,
有效载荷:json
});
}
}
常量SET_FILTER_LOWER='SET_FILTER_LOWER';
export const setFilter=filter=>({
类型:设置较低的过滤器,
有效载荷:过滤器,
});
导出常量setBooksReducer=(状态=初始状态,操作)=>{
开关(动作类型){
案例集书籍:
返回{…状态,
图书:state.books.concat(action.payload),
isFetched:真
}
案例集\过滤器\下部:
返回{
……国家,
书籍:action.payload.sort((a,b)=>a.price-b.price)
//书籍:action.payload.filter((el)=>el.price{
const dispatch=usedpatch();
const books=useSelector(state=>state.books.books);
返回(
调度(设置过滤器(书籍))}
/>
);
}
导出默认菜单过滤器;

假设您的书籍选择器为您提供未排序的价格数组,对吗

[
 {price: 0.99},
 {price: 1.22},
 {price: 0.49},
 {price: 0.22}
]
现在,您可以创建一个具有排序版本的常量,而不是直接使用books

const newBooks = [...books];
然后在那里分类

newBooks.sort((book1, book2) => book1.price - book2.price))
现在你可以绘制新书了

newBooks.map(i=>(<Books title = {i.title}
                 key={i.id}
                 author={i.author} 
                 image={i.image} 
                 price={i.price}
                 rating={i.rating}
                 />))
newBooks.map(i=>())

我不建议直接从书籍中进行排序,因为这会给您带来一些意外的行为或更新。

假设您的书籍选择器会给您一个未排序的价格数组,对吗

[
 {price: 0.99},
 {price: 1.22},
 {price: 0.49},
 {price: 0.22}
]
现在,您可以创建一个具有排序版本的常量,而不是直接使用books

const newBooks = [...books];
然后在那里分类

newBooks.sort((book1, book2) => book1.price - book2.price))
现在你可以绘制新书了

newBooks.map(i=>(<Books title = {i.title}
                 key={i.id}
                 author={i.author} 
                 image={i.image} 
                 price={i.price}
                 rating={i.rating}
                 />))
newBooks.map(i=>())

我不建议直接从书本中进行排序,因为这会给您带来一些意外的行为或更新。

不确定您想要实现什么。您真的需要在减速机中进行排序吗?为什么不将该行为作为显示代码的一部分?不确定您想要实现什么。您真的需要以红色进行排序吗ucer?为什么不将该行为作为显示代码的一部分?