【问题标题】:ReactJS passing input data to next screen/componentReactJS 将输入数据传递到下一个屏幕/组件
【发布时间】:2020-10-09 10:56:11
【问题描述】:

我已经在整个谷歌上查找了我的答案(哈哈)。 我想要达到的目标:

我的第一个屏幕是一个带有一些输入字段的表单,这些字段将输入存储到状态。 通过单击“提交”,用户进入下一个页面/屏幕,应该显示上一个输入。我只想将输入数据显示为 p 标签,而不是作为输入标签。

我如何实现这一目标?我是 reactjs 的新手。

我想过多种解决方案:

  1. 将输入数据存储到外部 JSON(这看起来相当复杂)
  2. 将数据作为道具传递,但我不知道该怎么做

到目前为止谢谢!

【问题讨论】:

  • 下一个“屏幕”是加载的全新页面吗?或者它只是单页内容的一部分,而 React 控制何时进入“下一个屏幕”?
  • 您的第二个屏幕是否与第一个屏幕共享相同的父组件?
  • 我在帖子中为你做了一个非常粗略的例子:jsfiddle.net/df4s9ey8

标签: javascript reactjs input


【解决方案1】:

我将假设您的第二个屏幕与您的第一个屏幕具有相同的父组件,如下所示:

render() {
    return (
        <div>
            {this.state.showFirstScreen && <FirstScreen />}
            {this.state.showSecondcreen && <Secondcreen />}
        </div>
    )
}

如果是这种情况,您的 FirstScreen 组件可以接受一个名为 onSubmit 之类的道具——您说您已经将来自 FirstScreen 的输入值存储在状态中,所以当 FirstScreen 完成时,您可以调用this.props.onSubmit(this.state),它会将状态发送到你的父组件,只要你在父组件中定义了一个回调函数:

{this.state.showFirstScreen && <FirstScreen onSubmit={this.onFirstScreenSubmit} />}

然后,您可以将第一个屏幕的状态保存到父组件的状态中,并将这部分状态传递给SecondScreen

[edit] 这是一个非常粗略的例子:https://jsfiddle.net/df4s9ey8/

【讨论】:

  • 感谢您的帮助!我理解你解决问题的方式。但不幸的是,这两个组件没有相同的父组件。屏幕的开关通过路由器工作。有没有其他办法解决?
  • 你可以使用像 Redux、React Context 这样的全局状态处理程序,或者如果你真的很厚脸皮想抛开一切,只需在屏幕 1 中执行 window._state_of_screen_1 = {myObj},然后当你进入屏幕 2 你可以阅读window._state_of_screen_1 并用它做你想做的事
  • 另外,您还可以弄清楚如何在使用路由器的上下文中通过道具传递状态。这也是可能的
  • 再次感谢!我找到了解决问题的方法。我按照你的建议使用了路由器。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-20
  • 1970-01-01
  • 2019-05-10
  • 2021-07-01
  • 2021-03-30
  • 2022-01-12
  • 2021-01-06
相关资源
最近更新 更多