@zakharoffam
Начинающий

Как убрать зависимость отрендереных методом .map компонентов друг от друга?

Добрый всем день.

Есть что-то подобное:
function Example () {
    const [message, setMessage] = React.useState(false);
    const sendMessage = (id, message) => () => {
        const data = {
            ID: id,
            MESSAGE: message,
        };
        sendMessage(data); //Это действие Redux, оно особого отношения к делу не имеет.
        setMessage(true);
return (
    arr1.map(i) => {
        <Grid>
            <Button onClick={sendMessage(i, message)>
                Отправить
            </Button>
            {message !== null && (
                <font>Отправлено</font>
             )}
          </Grid>


Дело в том, что если нажать кнопку Отправить на любой итерации массива arr1, то строка перерендеривается на всех итерациях.
Как отделить каждый элемент массива, в отдельный компонент, со своими данными внутри?
  • Вопрос задан
  • 66 просмотров
Пригласить эксперта
Ответы на вопрос 1
Robur
@Robur
Знаю больше чем это необходимо
1. они не зависят друг от друга, вы меняете стейт компонента и рендер вызывается заново. Это нормальное поведение.
2. переменная message - одна на всех, если вы ее поменяете то во всех разом произойдет изменение - добавится или удалится "отправлено".
Если у вас проблема в том что вы нажимаете отправить в одном компоненте, а "отправлено" появляется во всех - а хочется чтобы в каждом было свое "отправлено" то вам надо сделать для каждой строки отдельный флаг. Лучше всего - сделать то что внутри Grid отдельным компонентом и перенести message/setMessage туда.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы