2017-06-16 26 views
0

私はLayoutがHeaderの親で、HeaderはLogInコンポーネントに<Link>が含まれていますが、Layout、Header、LogIn Componentを持っています。今私が渡したいのは、LayoutコンポーネントからLogInへの小道具です。 は、ここに私のレイアウトコンポーネントです:レスポンスルータv4の親コンポーネントから親コンポーネントへの小道具の受け渡し

signup(email, password) { 
    return this.handleAuth(when(request({ 
     url: 'http://localhost:3001/users', 
     method: 'POST', 
     crossOrigin: true, 
     type: 'json', 
     data: { 
      "user":{"email":email,"password":password}   } 
    }))); 
} 



handleAuth(loginPromise) { 
    return loginPromise 
     .then(function(response){ 
      jwt = response.jwt; 
      localStorage.setItem('jwt', jwt); 
      this.setState({isLoggedIn:true}); 
     }); 
} 

render() { 
    return (
     <div className="App"> 
      <div className="App-header"> 
       <img src={logo} className="App-logo" alt="logo" /> 
       <h2>Welcome to React on Rails API</h2> 
      </div> 
      <Body /> 
      <Header signUp={this.signup.bind(this)} logIn={this.login.bind(this)}/><br/><br/> 
      <Footer/> 
     </div> 
    ); 
} 

ヘッダーコンポーネントでは、私は両方の小道具にアクセスすることができ、それは次のようになります。私の申し込みコンポーネントには、この小道具のを渡すために

render() { 
    console.log(this.props.signUp); 
    return (

     <header> 
      <br/> 
      <div className="container"> 
       <div className="row"> 
        <Link to='login' className="button six columns">SignIn</Link> 
        <Link to='signup' className="button six columns">SignUp</Link> 
       </div> 
      </div> 
     </header> 
    ); 
} 

今私が望むすべてがあるがアクセスthis.props.signUp

signup(e) { 
    e.preventDefault(); 
    console.log(this.state.registerValues); 
    this.props.signUp(this.state.registerValues.email,this.state.registerValues.password, this.state.registerValues.conform) 
     .catch(function(err) { 
      console.log("Error logging in", err); 
     }); 
} 

render() { 
    return (
    <div className="row"> 
     <div className="three column"></div> 
     <div className="six columns"> 
      <h1>Signup</h1> 
      <form> 
       <div className="form-group"> 
        <label htmlFor="username">Email</label> 
        <input type="text" value={this.state.registerValues['email']} onChange={this.handleChangeevent.bind(this)} className="form-control" name="email" placeholder="email" required/> 
       </div> 
       <div className="form-group"> 
        <label htmlFor="password">Password</label> 
        <input type="password" value={this.state.registerValues['password']} onChange={this.handleChangeevent.bind(this)} className="form-control" name="password" id="password" ref="password" placeholder="Password" required /> 
       </div> 
       <div className="form-group"> 
        <label htmlFor="password">Password again</label> 
        <input type="password" value={this.state.registerValues['conform']} onChange={this.handleChangeevent.bind(this)} className="form-control" name="conform" placeholder="Password again" required/> 
       </div> 
       <button type="submit" className="btn btn-default" onClick={this.signup.bind(this)}>Submit</button> 
      </form> 
     </div> 
     <div className="three column"></div> 
    </div> 

    ); 
} 

これは正しいアプローチか何か不足しているかどうかわかりません。これは、Reactが最初にいくつかの提案を探している学習プロジェクトです。

答えて

0

基本的に、リンクコンポーネントでメソッドを渡すことはできません。 Routeコンポーネントをレンダリングしているときにメソッドを渡すことはできますが、それ以外の方法で行うことはできません。 Example

これがあなたの反応成分の構造で達成できるものなら、素晴らしい!もしそうでなければ、reduxのようなpub/subの機能を調べることをお勧めします。

関連する問題