react组件如何传值给上一个页面组件
How does react component pass value to the previous page component
我有两个组件,FormComponent 和 OrderListComponent。 FormComponent 上有一个字段要求用户 select 来自 OrderListComponent 的列表中的一个值。所以我在 FormComponent 的字段上放了一个按钮,当用户单击该按钮时,我使用 router.push('XXXX')
将页面导航到 OrderListComponent 以向用户显示所有选项。当用户单击 OrderListComponent 上的选项之一时,我使用 router.goBack()
返回到 FormComponent。问题来了,FormComponent 是如何从 OrderListComponent 中获取 selected 值的?我知道我可以将 selection 保存为 redux 存储中的状态,但我想知道是否有更直接的方法来解决这个问题。
将所选值存储在 redux store 或组件状态本身将是更好的选择,但您也可以
- 存储在localStorage
- 存储在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.
}
最好的方法是拥有状态管理器。 Redux 状态将优雅地解决它。虽然作为 ; localStorage
/sessionStorage
可用于执行此操作。
但是当为订单选择的项目太多时,通过 URL 传递值将很棘手。
状态可以更改,因此状态中的任何内容都会在 OrderListCompoennt
处提供一致的输出。
您可以拥有订单状态并将项目推送到该状态。然后将用户重定向到 OrderListComponent
而不是 router.push('XXXX')
.
OrderListComponent
将观察状态并相应地显示项目。
FormComponent
也会观察订单状态以标记当前添加的项目。这样一来,就不会有router.goBack()
;只是 router.push
的重定向
当您的应用处于 FormComponent
时,订单状态将自动负责标记当前订购的商品。
我有两个组件,FormComponent 和 OrderListComponent。 FormComponent 上有一个字段要求用户 select 来自 OrderListComponent 的列表中的一个值。所以我在 FormComponent 的字段上放了一个按钮,当用户单击该按钮时,我使用 router.push('XXXX')
将页面导航到 OrderListComponent 以向用户显示所有选项。当用户单击 OrderListComponent 上的选项之一时,我使用 router.goBack()
返回到 FormComponent。问题来了,FormComponent 是如何从 OrderListComponent 中获取 selected 值的?我知道我可以将 selection 保存为 redux 存储中的状态,但我想知道是否有更直接的方法来解决这个问题。
将所选值存储在 redux store 或组件状态本身将是更好的选择,但您也可以
- 存储在localStorage
- 存储在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.
}
最好的方法是拥有状态管理器。 Redux 状态将优雅地解决它。虽然作为 localStorage
/sessionStorage
可用于执行此操作。
但是当为订单选择的项目太多时,通过 URL 传递值将很棘手。
状态可以更改,因此状态中的任何内容都会在 OrderListCompoennt
处提供一致的输出。
您可以拥有订单状态并将项目推送到该状态。然后将用户重定向到 OrderListComponent
而不是 router.push('XXXX')
.
OrderListComponent
将观察状态并相应地显示项目。
FormComponent
也会观察订单状态以标记当前添加的项目。这样一来,就不会有router.goBack()
;只是 router.push
当您的应用处于 FormComponent
时,订单状态将自动负责标记当前订购的商品。