如何将表单数据传递给另一个本地的反应页面?

时间:2018-01-19 05:35:45

标签: reactjs react-native react-navigation

我已经创建了一个这样的登录页面:

class Login extends Component {
  render() {
    const { navigate } = this.props.navigation
    return (
      <View style={{ flex: 1 }}>
        <View style={styles.container}>
          <View style={styles.container1}>
            <TextInput
              style={{ width: 190, color: 'white' }}
              placeholder="User Name"
              placeholderTextColor="#f9f9f9"
              underlineColorAndroid="#f9f9f9"
            />
            <TextInput
              placeholder="Password"
              secureTextEntry
              returnKeyType="go"
              ref={input => (this.passwordInput = input)}
              style={{ width: 190, color: 'white' }}
              placeholderTextColor="#f9f9f9"
              underlineColorAndroid="#f9f9f9"
            />

            <TouchableOpacity style={{ top: 10 }}>
              <Button
                color="#314561"
                onPress={() => navigate('HomePage')}
                title="Login"
              />
            </TouchableOpacity>
          </View>
        </View>
      </View>
    )
  }
}
export default Login

现在我需要将用户名传递给主页。我已经提到了很多资源,并没有得到任何解决方案。如何将用户名传递给主页?

3 个答案:

答案 0 :(得分:1)

首先使用onChangeText将输入值保存到某些变量

<TextInput
value= {this.state.userName}
onChangeText = {(text)=>{
this.setState({userName:text});
}
 />

然后你可以传递值

<Button 
 onPress={() => navigate('HomePage',{"userName":this.state.userName})} // you can pass objects
  title="Login"
   />

答案 1 :(得分:0)

class Login extends Component {
  constructor(props) {
    super(props);

    this.state = {
      userName:"",
      password:""
    };
  }
  updateUserName = (name) =>{
     this.setState({
      userName:name,
     })
  }
  updatePwd = (pwd) =>{
     this.setState({
      password:pwd,
     })
  }   
  render() {
    const { navigate } = this.props.navigation
    return (
      <View style={{ flex: 1 }}>
        <View style={styles.container}>
          <View style={styles.container1}>
            <TextInput
              style={{ width: 190, color: 'white' }}
              placeholder="User Name"
              placeholderTextColor="#f9f9f9"
              underlineColorAndroid="#f9f9f9"
              onChangeText={(name) => this.updateUserName(name)}
              value={this.state.userName}               
            />
            <TextInput
              placeholder="Password"
              secureTextEntry
              returnKeyType="go"
              ref={input => (this.passwordInput = input)}
              style={{ width: 190, color: 'white' }}
              placeholderTextColor="#f9f9f9"
              underlineColorAndroid="#f9f9f9"
              onChangeText={(pwd) => this.updatePwd(pwd)}
              value={this.state.password}   
            />

            <TouchableOpacity style={{ top: 10 }}>
              <Button
                color="#314561"
                onPress={() => navigate('HomePage',{userName:this.state.userName})}
                title="Login"
              />
            </TouchableOpacity>
          </View>
        </View>
      </View>
    )
  }
}
export default Login

file:homePage.js

  constructor(props) {
    super(props);
    const { params } = this.props.navigation.state;
    var data = params.userName;     
    this.state = {
      userName : data
    };
  }

答案 2 :(得分:0)

进行以下更改:

在登录组件中:

用户名字段

<TextInput 
          style={{width:190,color:'white'}} 
          placeholder="User Name" 
          placeholderTextColor="#f9f9f9" 
          underlineColorAndroid='#f9f9f9'
          onChangeText=
            {(username)=>this.setState({username})}
/>

按钮:

<TouchableOpacity style={{top:10}}>
        <Button 
          color="#314561" 
          onPress={() => navigate('HomePage'), { username: this.state.username }} 
          title="Login"/>
        </TouchableOpacity>

在Home组件中:

e.g。 render method

  render(){
      const {state} = this.props.navigation;
      console.og(state.params.username)
    }

更新 在登录构造函数中,初始化state

constructor(){
   super();
   this.state = {};
}