2017-12-21 11 views
2

私のの家にコンポーネントがあります。ユーザーの名前を読み取った後、有効であるかどうかを確認します(名前が正しい場合、Axiosはユーザーを返します)。それが有効で、ボタンをクリックすると、ダッシュボードコンポーネントが表示されます。問題は、名前が有効であってもダッシュボードのホームから受け取っていません。私はcomponentDidUpdateで何かを試しましたが、うまく動作しませんでした。私が理解していないのは、ダッシュボードがレンダリングされても正しいユーザーを入力したにもかかわらず、その小道具を取得しないのはなぜですか?コンポーネントが小道具を受け取りません

これはコンストラクタのない私のホームコンポーネントです:

inputChange(event) { 
    this.setState({username:event.target.value}); 
} 

login() { 
    this.setState({clicked: true}) 
    UsersService.validUser(this.state.username).then((user) => { 
     this.setState({valid: true, user: user}) 
    }); 
} 

change() { 
    this.setState({clicked: false}) 
} 

render() { 
    if(this.state.clicked) { 
     if (this.state.valid) 
      return (
       <Redirect to={{ pathname: '/dashboard', state: { user: this.state.user } }}/> 
      ) 
     else 
      this.change; 
    } 
    return (
     <div> 
      <input onChange={this.inputChange.bind(this)}/> 
      <button onClick={this.login}>LOGIN</button> 
     </div> 
} 

ダッシュボードコンポーネント

export interface DashboardProps { 
    user: IUser 
} 

interface DashboardState { 
} 

class Dashboard extends React.Component<DashboardProps, DashboardState> { 
    public static defaultProps: DashboardProps = { 
     user: { 
      userId: '', 
      name: '', 
      phone: '', 
      email: '', 
      age: '', 
      tag: [] 
     } 
    } 
    constructor(props: DashboardProps) { 
     super(props); 

     this.state = { 
     }; 
    } 

    render() { 
     return (
      <div> 
       <Header user={this.props.user}/> 
       <div> 
        <span>Hi, {this.props.user.name}</span> <br/> 
       </div> 
      </div> 
     ); 
    } 
} 

export default withRouter(Dashboard); 

答えて

2

は、ダッシュボードコンポーネントにreact-routerwithRouter HOCを使用してみてくださいは、現在のルーティングの小道具は、コンポーネントに注入します。

export default withRouter(Dashboard); 

編集:

あなたの状態情報がthis.props.location.state.userで利用できるようになります。

+0

まだ動作していません – zeudarius

+0

@zeudarius - 問題の 'Dashboard'コンポーネントを追加できますか? –

+0

ダッシュボードコンポーネントを追加しました – zeudarius

関連する問題