2015-09-26 34 views
7

redux-blog-example'a bakıyorum. şöyle ki SignupRoute.js vardır:React Router, React içeriğine nasıl girer?

router bu class ait context kadar kablolu olsun demek nasıl
@connect(state => ({ 
    auth: state.auth 
}), { 
    signup 
}) 
export default class SignupRoute extends React.Component { 
    static contextTypes = { 
    router: React.PropTypes.object 
    } 

    handleSubmit = (email, password) => { 
    const router = this.context.router; 

    this.props.signup(email, password, router); 
    } 

    render() { 
    return (
     <Signup 
      auth={this.props} 
      handleSubmit={this.handleSubmit} 
     /> 
    ); 
    } 
} 

?

cevap

10

Belgesiz, ancak oldukça yaygın olarak uygulanan React özelliği olan context kullanır. Tam bir zayıflama için bkz. this article, ancak işte bunun özü:

let router = Router(); // just illustrating, this is not how you instantiate React router 

class MyComponent extends React.Component { 
    static contextTypes = { 
     router: React.PropTypes.object 
    }; 

    render(){ 
     // By declaring context type here, and childContextTypes 
     // on the parent along with a function with how to get it, 
     // React will traverse up and look for the `router` context. 
     // It will then inject it into `this.context`, making it 
     // available here. 
    } 
} 

class Parent extends React.Component { 
    static childContextTypes = { 
     router: React.PropTypes.object 
    }; 

    getChildContext(){ 
     return { 
     router: this.props.router 
     }; 
    } 

    render(){ 
     return <MyComponent />; 
    } 
} 

ReactDOM.render(<Parent router={router} />, document.getElementById('app'));