#reactjs #react-router #react-table
#reactjs #react-router #react-таблица
Вопрос:
Я использую react router для перехода на другую страницу и передачи состояния на эту страницу, используя это внутри useMemo
const columns = React.useMemo(
() => [
{
Header: "Actions",
id: "actions",
Cell: (tableProps) => {
return (
<>
<Link
to={{
pathname: "list-table/list-table-edit",
state: { selectedRow },
}}
>
<span
style={{
cursor: "pointer",
color: "grey",
textDecoration: "underline",
}}
onClick={(event) => {
setSelectedID(tableProps.row.original.asset_ID);
}}
>
<Tooltip title="Edit Row">
<EditButton aria-label="edit">
<CreateIcon fontSize="small" />
</EditButton>
</Tooltip>
</span>
</Link>
</>
);
},
},
...MakeTableColumns,
],
[selectedRow]
);
Мое состояние объявляется следующим образом
const [selectedID, setSelectedID] = useState();
const selectedRow = oriData.find((row) => row.asset_ID === selectedID);
когда пользователь нажимает Edit
, он устанавливает идентификатор строки selectedID
, selectedRow
находит значения строк и переходит на list-table-edit
страницу.
однако, когда я утешаю.войдите props.location.state
из list-table-edit
, он показывает undefined
. Когда я вынимаю <Link> ..
за пределы useMemo
и даю идентификатор состояния, он работает нормально, я думаю, что это что-то не так useMemo
.
Если кто-нибудь может помочь, я был бы очень признателен, спасибо
Обновлено
Теперь я переключаюсь с state: { selectedRow }
на state: { tableProps.row.original }
и перехожу на другую страницу, и она работает без передачи состояния. Я мог бы уже иметь выбранное значение строки при вызове tableProps.row.original
.
Комментарии:
1. Вы проверили, что
selectedRow
определено в компоненте со ссылкой? Можете ли вы предоставить более полный пример кода? Предоставить код как для связующего компонента, так и для связанного компонента? Какую версию react-router / react-router-dom вы используете?2. Я добавляю его в
useMemo
крючок для создания таблиц, я вынес его за пределыuseMemo
крючка, и он работает, похоже, что это с помощью крючка useMemo. Я обновлю свой вопрос.3. Так ли это
selectedRow
в теле функционального компонента и пересчитывается каждый цикл рендеринга? Я думаю, нам все еще нужно больше контекста. Больше кода этого компонента и кода для компонента, пытающегося получить доступ к состоянию маршрута. По-прежнему не подтверждается, имеет лиselectedRow
оно нужное значение при нажатии на ссылку.4. Это может быть потому
selectedRow
, что не имеет значения при нажатии на ссылку внутриuseMemo
, это полный код компонента, если вы хотите проверить. codesandbox.io/s/confident-dirac-jhqp0?file=/src/App.js Я объявил эти государства на вершине.5. Если вы вошли
selectedRow
в memo hook перед возвратом массива столбцов, видите ли вы, что он обновляется с обновлениями состояния в главном компоненте?
Ответ №1:
<Link to={{ pathname: '/list-table/list-table-edit', state: { record: selectedRow} }}>My route</Link>
Комментарии:
1. Он все еще
undefined
отображаетсяstate: {record: undefined}