#javascript #reactjs #arraylist #javascript-objects #push
#javascript #reactjs #arraylist #javascript-объекты #толкать
Вопрос:
Я получил список объектов, которые я отображаю на экране с помощью функции .map . Это выглядит так:
Компонент 1:
let itemList = [
{
type: "White T-shirt",
id: 1,
cost: 300,
image: whiteTshirt
},
{
type: "Purple T-shirt",
id: 2,
cost: 350,
image: purpleTshirt
},
{
type: "Baseballcap",
id: 3,
cost: 150,
image: whiteCap
},
{
type: "Vice Golfball",
id: 4,
cost: 40,
image: golfball
},
{
type: "Mousepad",
id: 5,
cost: 200,
image: mousepad
}
];
let products = itemList.map(items => {
let item =
<div key={items.id}>
<h2>{items.type}</h2>
<img className="image" src={items.image}></img>
<p className="price">${items.cost}</p>
<button onClick={onBuy} className="buy-btn">Buy</button>
</div>
return item;
})
return(
{shoppingcart ? <Component2 /> : null}
<main> {products} </main>
)
Компонент 2:
const Comopnent2 = props => {
const [webshop, setWebshop] = useState(false);
return(
<div>
{webshop ? <Webshop /> : null }
<a href="/Webshop" onClick={e => { e.preventDefault(); setWebshop(true)}} >
<p className="to-shop"> Back to shop</p></a>
<h2 className="shopping-header">Your Shopping Cart</h2>
<div className="cart-container">
// Here i want to object that i clicked display
</div>
)
}
Я хочу поместить один конкретный объект в другой массив в другом компоненте, который у меня есть. Я хочу сделать это, когда я нажимаю кнопку, которая вызывает функцию onBuy. Как мне это сделать? Спасибо.
Комментарии:
1. мне непонятно, чего именно вы хотите? вы можете фильтровать список с помощью . фильтр, но я не уверен, что это то, что вы ищете
2. @adirabargil теперь я обновил свой вопрос 🙂
Ответ №1:
Сначала создайте крючок для элемента корзины внутри компонента 1:
const [cartItem, setCartItem] = useState();
устанавливайте CartItem всякий раз, когда нажимается кнопка и вызывается onBuy:
onBuy (id) {
let checkoutItem = this.itemList.find(item => item.id === id)
setCartItem(checkoutItem)
}
Вам потребуется передать идентификатор элемента при объявлении кнопки, которая вызывает функцию onBuy .
let products = itemList.map(items => {
let item =
<div key={items.id}>
<h2>{items.type}</h2>
<img className="image" src={items.image}></img>
<p className="price">${items.cost}</p>
<button onClick={onBuy(item.id)} className="buy-btn">Buy</button>
</div>
return item;
})
Чтобы передать этот выбор компоненту 2. Вы можете передать его как prop в компоненте 1:
return(
{shoppingcart ? <Component2 item={cartItem} /> : null}
<main> {products} </main>
В компоненте 2 вы можете соответствующим образом отображать данные из реквизитов:
const Comopnent2 = props => {
const [webshop, setWebshop] = useState(false);
return(
<div>
{webshop ? <Webshop /> : null }
<a href="/Webshop" onClick={e => { e.preventDefault(); setWebshop(true)}} >
<p className="to-shop"> Back to shop</p></a>
<h2 className="shopping-header">Your Shopping Cart</h2>
<div className="cart-container">
{prop.item.name} //whatever properties your cart item has, I have used name just for example
</div>
)
}
Комментарии:
1. @gospecomid12 Я соответствующим образом обновил свой ответ, вы можете посмотреть
2. Он говорит, что мой список элементов не определен? @chindicoder
3. Что-то не так с этой строкой ‘пусть checkoutItem = this.ItemList.find(item => item.id === идентификатор)’. После этого список элементов становится неопределенным
4. попробуйте без этого ключевого слова. просто напишите ItemList.find(item => item, id === id) . Дело в том, что массив ItemList должен быть доступен в области действия функции. Я не видел весь ваш код, поэтому не могу точно сказать вам, как его написать, но я думаю, что он должен работать без этого ключевого слова, поскольку вы объявили его непосредственно в компоненте.