使用直接传递的功能道具来反应离子导航

时间:2019-12-03 21:49:21

标签: reactjs ionic-framework react-router

如何使用带有功能性道具的React和Ionic推送页面?

我确实尝试过:

history.push({
  pathname: '/edit_some_property',
  state: {
    onSetSomeProperty(val) { setSomeState(val) }
  }
})

但是抛出:

  

DOMException:无法在“历史记录”上执行“ pushState”:onSetSomeProperty(val){setSomeState(val); }无法克隆。

显然,state被序列化为字符串,因此传递函数将无法正常工作。

还是有另一种方法可以更好地将带有回调的屏幕推送到上一个屏幕?


背景和详细信息:

我有一个非常分层的样式React + Ionic应用程序。

  1. 从列表中选择一个项目,然后按一下包含项目详细信息的屏幕。
  2. 从列表中选择一个子项目,然后按一个带有子项目详细信息的屏幕。
  3. 点击以编辑属性,推送带有表单字段的屏幕,并使用结果回调到上一个屏幕。

现在看来,为了在屏幕之间导航,Ionic需要您使用React Router,其中每个页面都有唯一的URL。但这在这里不能很好地工作,因为每个屏幕都取决于先前屏幕的状态。

这意味着没有明显的方法可以在页面之间交流丰富的道具。如果我有上一页的回调,则无法传递,因为我无法直接访问通过路由器推送的组件。


还有ion-nav https://ionicframework.com/docs/api/nav,它更接近我的需求,但似乎根本没有任何反应接口。

我尝试过:

<IonNav root={Home} />

在深陷于混乱的内部中抛出了这个:

  

错误:缺少框架委托

1 个答案:

答案 0 :(得分:0)

我原来的回答很抱歉。我做了一些测试,发现传递给状态的任何东西都需要可序列化。为了实现此功能,其他人报告说https://www.npmjs.com/package/safe-json-stringify帮助了他们。