@JeyFom

Как передать данные между двумя компонентами React (не родителем и потомком)?

Делаю todo. У меня есть компонент для добавленной таски, в котором находятся текстовое поле и кнопка "редактировать", при нажатии на кнопку происходит переход на новую страницу и открывается инпут, в котором я ввожу новый текст для редактируемой таски.
Подключен редакс, в нем стейт - это массив таск. Для каждой таски индексы не задаю самостоятельно, беру индексы объектов массива (структура: title, done):
{this.props.tasks.map((task, index) => (
          <TaskItems 
            isDone={task.done}
            doneHandler={() => this.props.doneHandler(index)}
            deleteHandler={() => this.props.deleteHandler(index)}
            inputChange={this.inputChange}
            key={index}
            task={task}
          </TaskItems>)
        )}

Вопрос вот в чем - как мне получить индекс итерируемой таски для изменения ее текста? Ведь компонент с таской и компонент для страницы с редактированием связаны только переходом (подключен роутер)
<Link to='/edit'>Edit</Link>

Индекс нужен, чтобы передать его экшену редакса.
  • Вопрос задан
  • 196 просмотров
Решения вопроса 1
@paoluccio
Можно попробовать динамически вставлять index в путь для Link:
<Link to={`/edit/${index}`}>Edit</Link>

Роут тоже слегка изменить:
<Route path='/edit/:index'>
  <EditPage />
</Route>


Затем, на странице редактирования todo, index можно получить через хук useParams:
import { useParams } from 'react-router-dom';

const EditPage = () => {
  const { index } = useParams();

  // ...
};
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@McBernar
Ну так передавайте /edit/:id
Хотя я и не понимаю - зачем вам отдельная страница для редактирования в век SPA.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
22 нояб. 2024, в 02:56
10000 руб./за проект
22 нояб. 2024, в 00:55
500 руб./за проект
21 нояб. 2024, в 23:30
300000 руб./за проект