Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用react和redux制作用户表单?_Javascript_Reactjs_Forms_Redux - Fatal编程技术网

Javascript 如何使用react和redux制作用户表单?

Javascript 如何使用react和redux制作用户表单?,javascript,reactjs,forms,redux,Javascript,Reactjs,Forms,Redux,当我的应用程序首次加载时,它从服务器获取用户数据,并在AppBar(材质ui)中呈现用户信息: displayProfileLink(){ const{user}=this.props; 如果(!user.name){ 返回 }否则{ 返回 {user.name} } } 如您所见,有一个指向配置文件组件的链接。用户配置文件组件基本上是更新用户数据的表单。问题是,当您第一次使用url上的/profile打开应用程序时,组件在从服务器获取用户数据之前呈现,因此表单输入为空,您需要导航到其他链接并

当我的应用程序首次加载时,它从服务器获取用户数据,并在AppBar(材质ui)中呈现用户信息:

displayProfileLink(){
const{user}=this.props;
如果(!user.name){
返回
}否则{
返回
{user.name}
}
}
如您所见,有一个指向配置文件组件的链接。用户配置文件组件基本上是更新用户数据的表单。问题是,当您第一次使用url上的/profile打开应用程序时,组件在从服务器获取用户数据之前呈现,因此表单输入为空,您需要导航到其他链接并返回以查看输入上的用户数据

当用户获取完成时,我如何更新输入值,而不需要在其他链接之间切换?如果我使用组件状态来控制输入值,那么当组件挂载但尚未获取用户数据时,就会设置该状态

下图显示了问题:

关于英语,我很抱歉,非常感谢。 @---编辑

如您所见,我可以将用户名“Rodrigo”放在AppBar上,但是当用户表单组件加载时,如果我使用组件状态控制输入值设置组件状态和来自redux的用户状态,它们将为空,因为尚未获取用户信息。appbar显示名称,因为它在获取用户数据后再次呈现,但我无法对表单执行相同的操作

User.jsx

componentDidMount() {
    const {user} = this.props;
    if (user.name) {
      this.setState({
        monetizze_x_consumer_key: user.monetizze_x_consumer_key,
        eduzz_api_key: user.eduzz_api_key,
        eduzz_public_key: user.eduzz_public_key
      })
    }
  }
<TextField          
  helperText="monetizze_x_consumer_key"
  label="Chave para geração de Token Monetizze"
  value={this.state.monetizze_x_consumer_key}
  fullWidth={true}
  required={true}
  id="monetizze_x_consumer_key"
  onChange={(event) => this.setState({monetizze_x_consumer_key: event.target.value})}
/>
componentDidMount(){
const{user}=this.props;
if(用户名){
这是我的国家({
货币化用户密钥:user.monetize用户密钥,
eduzz_api_密钥:user.eduzz_api_密钥,
eduzz_公钥:user.eduzz_公钥
})
}
}
this.setState({monetize_x_consumer_key:event.target.value})
/>

当componentDidMount运行时,用户数据尚未就绪,因此组件状态仍为空值,如何在获取用户数据后再次设置状态?

您可以使用componentWillMount()生命周期进行设置

首先,如果您获取的数据在数组中,则使用空数组定义状态;如果您获取的数据在字符串中,则使用空字符串定义状态

然后定义componentWillMount()并在此生命周期中点击api,在收到响应时设置状态,然后根据需要使用状态。

解决方法:

componentWillReceiveProps(nextProps)

即使在呈现应用程序组件之前,我也在获取用户数据,我可以更改状态,状态有用户信息,我可以从组件访问,问题只是页面首次加载时的表单输入。为了更好地理解,我将设置一个打印屏幕
componentWillReceiveProps(nextProps)