2015-07-01 2 views
23

Можно ли передать объект через Link компонент в реактивном маршрутизаторе?Объект пропуска через Link in response router

Что-то вроде:
<Link to='home' params={{myObj: obj}}> Click </Link>

Точно так же, как я бы передать props из компонента в Parent к Child.

Если это невозможно, то лучший способ достичь этого:
У меня есть приложение React + Flux, и я представляю таблицу с некоторыми данными. То, что я пытаюсь сделать, - это когда я нажимаю на одну из строк, мне потребуется около . компонент для этой строки. В строке есть все данные, которые мне нужны, поэтому я подумал, что было бы здорово, если бы я мог просто пройти через Link.

Другой вариант был бы передать id из строки в URL, прочитать его в деталей компонент и запросить данные из хранилища для ID с.

Не уверен, что это лучший способ достижения выше ...

+0

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

ответ

23

Итак, мой окончательный вывод по этому вопросу состоит в том, что я не думал об этом правильно. Казалось естественным просто передать свои данные через Link, чтобы я мог получить к ним доступ в моем Child компоненте. Как упоминалось Colin Ramsay, есть что-то под названием state в Link, но это не способ сделать это. Это будет нормально работать, когда данные будут переданы через Link, только если пользователь нажмет на что-то и отправится в компонент Child.

Проблема возникает, когда пользователь обращается к url, который используется в Link, тогда нет способа получить данные.

Таким образом, решение в моем случае было пройти ID в Link Params, а затем проверить, если мой Store имеет данные (пользователь обращается к нему с помощью Link), а затем получить эти данные из Store.

Или, если данные не в Store звонка action для извлечения данных из API.

+0

В response-router 3.0.0 компонент Link не имеет атрибута params. Как это делается для текущей версии? – Misi

10

Нет, вы не можете передать объект в params, так что я с вами согласен, что ваш лучший план, чтобы передать идентификатор хранилище, хранилище испускает событие CHANGE, а компоненты запрашивают информацию о магазине.

3

Это невозможно, вам нужно передать что-то, что можно сохранить в URL-адресе, таком как идентификатор строки. Затем вы будете использовать этот идентификатор для выполнения поиска объекта.

+0

Единственная альтернатива - передать объект как JSON, но в любом случае вы все равно сохраните его в форме, которая будет храниться в URL-адресе. Существует также государственная поддержка для Link, на которую вы можете смотреть, но это не одно и то же. –

1

Вы можете попробовать выполнить сериализацию JSON, а затем де-сериализовать его на принимающей стороне.

0

Объект можно передать через ссылку.Добавить данные в запросе, а не Params и stringify объект:

<Link to={{ pathname: `/blog/${post.id}`, query: { 
 
    title: post.title, 
 
    content: post.content, 
 
    comments: JSON.stringify(post.comments) 
 
} }}>Read More...</Link>

Затем в детском компоненте разобрать строку обратно в объект:

JSON.parse(this.props.comments) 
Смежные вопросы