【发布时间】:2022-03-10 21:12:08
【问题描述】:
我正在将带有 props 的数据数组映射到一个组件中。然后 onClick 我将一些数据从渲染的项目中提取到 redux/reducer 中,尝试渲染相同的数据 - 但在页面上的不同位置。
我的问题是(我假设?)ID 是相同的 - 我使用已经获取的键/ID 呈现数据 - 而 React 需要唯一的。
我不确定是否是导致问题的原因 - 但我不断收到警告说 react 需要唯一的关键道具。
(这是一个商店应用程序 - 点击后,我想将所选商品添加到带有 redux 的购物车...)
想法?
这里我正在构建要渲染的组件
import { useDispatch, useSelector } from 'react-redux'
import { add } from '../features/addToCart'
export const ReduxshopProps = (props) => {
const dispatch = useDispatch()
const handleAddToCart = (props) => {
dispatch(add(props));
};
return (<>
<div key={props.id} className='shopitem'>
<img src={props.url} />
<h2>{props.title}</h2>
<p className='boldprice'>${props.price}</p>
<button onClick={() => handleAddToCart(props) }
>
ADD TO CART
</button>
</div>
</>
)
}
这里我将数据传递给组件
import React from "react"
import { ReduxshopProps } from "./ReduxshopProps"
import shopdata from "./shopdata"
export default function ReduxShop() {
const cards = shopdata.map(props => {
return (
<ReduxshopProps
key={props.id}
title={props.title}
price={props.price}
url={props.url}
/>
)
})
return (
<div className='shopwrapper'>
<h1>TradingView Indicators</h1>
<div className='itemWrapper'>
{cards}
</div>
</div>
)
}
这是从上面提取数据的 REDUX 代码
import { createSlice } from "@reduxjs/toolkit";
const initialState = {
cartItems: [],
cartTotalQuantity: 0,
cartTotalAmount: 0,
}
export const addToCartSlice = createSlice({
name: 'cart',
initialState,
reducers: {
add(state, action ) {
const itemIndex = state.cartItems.findIndex(
(item) => item.id === action.payload.id
);
if(itemIndex >= 0){
state.cartItems[itemIndex].cartQuantity += 1
} else {
const tempProduct = {...action.payload, cartQuantity: 1}
state.cartItems.push(tempProduct);
}
},
},
});
export const {add} = addToCartSlice.actions;
export default addToCartSlice.reducer;
在这里,当有人单击按钮时,我正在尝试呈现数据.. onClick 它作为所有组件具有相同的 ID - 我也从下面得到 key prop 错误
import React from 'react'
import { useSelector } from 'react-redux'
function Cart() {
const cart = useSelector((state) => state.cart)
return (
<div>
<h1>Cart</h1>
{cart.cartItems.map(cartItem => (
<div key={cartItem.id}>
<p>product : {cartItem.title}</p>
<p>price {cartItem.price}</p>
<p>quantity : {cartItem.cartQuantity}</p>
<p>url : <img src={cartItem.url} /></p>
</div>
))}
</div>
)
}
export default Cart
【问题讨论】:
-
你能编辑你的帖子并提供一些代码吗?
-
请提供一些代码
标签: javascript reactjs redux react-redux key