Как компонент react передает значение предыдущему компоненту страницы
У меня есть два компонента, FormComponent и OrderListComponent. Существует одно поле в FormComponent, чтобы попросить пользователей выбрать значение из списка, который находится в OrderListComponent. Поэтому я помещаю кнопку на поле в FormComponent, когда пользователи нажимают на эту кнопку, я использую router.push('XXXX')
для перехода на страницу OrderListComponent, чтобы показать все параметры для пользователя. Когда пользователи нажимают одну из опций на OrderListComponent, я использую router.goBack()
, чтобы вернуться к FormComponent. Вот в чем проблема, как это сделать FormComponent получить выбранное значение из OrderListComponent? Я знаю, что могу сохранить выбор как состояние в магазине redux, но я блуждаю, есть ли более прямой способ решить эту проблему.
2 ответа:
Хранение выбранного значения в хранилище redux или самом состоянии компонента было бы лучшим выбором для этого, но вы также можете
- храните его в локальном хранилище
- храните его в sessionStorage
- при перенаправлении пользователя обратно, передайте его в качестве параметра url
Если вы используете любой из этих методов, в
FormComponent
Вы можете проверить, существует ли значение, и выполнить соответствующие операции.Пример код
OrderListComponent
let handleChange = (value) => { localStorage.orderListValue = value }
Это будет заменить, а также какое-либо существующее значение..- Используй свой мозг здесь.
FormComponent
if ( localStorage.orderListValue ) { console.log('Yay.. we have data'); } else { // ask the user to select the List first. }
Лучший способ-это иметь государственного менеджера. Государство, я полагаю, это будет элегантно решать. Хотя как случайный пользователь упомянул в своем ответе;
localStorage
/sessionStorage
можно использовать для этого.Но передача значений по URL-адресу будет сложной, когда слишком много элементов выбрано для заказа.
Состояние может быть изменено таким образом, что наличие чего-либо в состоянии даст согласованный выход в
OrderListCompoennt
.Вы можете иметь состояние заказа и толкать элементы в это состояние. А затем перенаправить пользователя на
OrderListComponent
вместо того, чтобы делатьrouter.push('XXXX')
.
OrderListComponent
будет следить за состоянием и показывать предметы соответственно.
FormComponent
также будет следить за состоянием заказа для маркировки добавленных в данный момент элементов. Таким образом, не будет никакихrouter.goBack()
; только перенаправление поrouter.push
И когда ваше приложение будет находиться в
FormComponent
, состояние заказа автоматически будет отвечать за маркировку элементов, которые в данный момент находятся в порядке.