Как динамически изменить массив? React js

264
09 мая 2022, 12:50

У меня есть два компонента, в первом компоненте массив, который я хочу динамически изменить (например при нажатии на кнопку) и передать во второй компонент. Но я немного запутался. Буду благодарен за подсказку

Первый компонент с массивом

import React, {useState} from 'react';
import Context from './Context';
import Products from './Products';
function App() {
  let [arr, setArr] = React.useState([
    {id: 1, name: "Something1", price: 500,},
    {id: 2, name: "Something2", price: 1000,},
  ])

  return (
    <Context.Provider value={arr}>
      <div className="App">
        <Products />
      </div>
    </Context.Provider>
  );
}
export default App;

Второй компонент

import React, { useContext } from 'react';
import Context from './Context';
function Products() {
    const arr = useContext(Context);
    return(
        <div className="Products">
            {arr.map(item => {
                return(
                    <div key={item.id}>
                        <h1>{item.id}</h1>
                        <h2>{item.name}</h2>
                        <h3>{item.price}</h3>
                    </div>
                )
            })}
        </div>
    )
}
export default Products;
Answer 1
<div onClick={clickHandler}></div>
  const clickHandler = () => {
    let newArr = [...arr]
    newArr[0] = {...newArr[0],id:25}
    setArr(newArr)
  }

подробное объяснение моего ответа https://www.youtube.com/watch?v=Z7_7xvJ7Cjc

данные в Products сами обновятся после setState произойдет reRender компонента главное не забывать про иммутабельность (работать всегда с копией объекта не мутировать объект (не изменять на прямую))

не принимай ответ как правильный мне самому интересно может есть более лаконичная запись моего ответа но решение верное

READ ALSO
Scroll Модального окна

Scroll Модального окна

Всем привет! У меня имеется приложение и кнопка при клике на которую появляется модальное окно(в нем содержатся продукты взятые из store(redux))При...

170
Не перезаписывает содержимое DIV

Не перезаписывает содержимое DIV

При нажатии <button> выполняется функция f1()Функция получает div

161
Странность меню аккордеон

Странность меню аккордеон

Взял с инета меню аккордеон, и прикол в том, что когда оно раскрывается, оно двигает вниз рядом стоящий с ним элементВ целом решается, если...

236
Как задать событие создаваемому элементу в JavaScript

Как задать событие создаваемому элементу в JavaScript

Я хочу создать элемент div JS кодом Я делаю так:

141