2015-09-26 13 views
7

Sto guardando il redux-blog-example. C'è SignupRoute.js che assomiglia a questo:In che modo React Router entra nel contesto React?

@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} 
     /> 
    ); 
    } 
} 

modo la router Connettatevi fino alla context di questa class?

risposta

10

Utilizza context, una funzione di React non documentata ma abbastanza ampiamente implementata. Per un elenco completo vedi this article, ma ecco il succo:

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'));