リアクタ・ルータ1.xを指し示すものが見つかった場合は、重複しないでください。この問題に関して私がStackOverflowで読んだ答えは廃止された構文を使用しています。リアクタ・ルータ2.0:ログインから子供にユーザ名を渡す
私はベース( "/")パスに非常に単純なログインページがあり、ログインした後、ユーザーのユーザー名はすべての子に小道具を介して渡されます(後続のすべてのAPI呼び出しでパラメータとして使用されることになります)。
render((
<Router history={hashHistory}>
<Route path="/" component={App}>
<IndexRoute component={Login} />
<Route path="/feed" component={Feed} />
<Route path="/search" component={Search} />
</Route>
</Router>
), document.getElementById('react-content'));
App.jsを::
問題は、それは、ルータが反応など
ルートをroute
、component
以外<Route>
タグに追加小道具を認識していないようです
var App = React.createClass({
getInitialState: function() {
return {username: ''};
},
updateUser: function(name) {
this.setState({username: name});
},
render: function() {
return React.cloneElement(this.props.children,
{username: this.state.username, assignUser: this.updateUser}
);
}
});
Login.js:
var Login = React.createClass({
contextTypes: {
router: React.PropTypes.object.isRequired
},
getInitialState: function() {
return {user: this.props.username};
},
userLogin: function(value) {
setTimeout(this.props.assignUser(value), 0);
this.context.router.push('/feed');
},
render: function() {
return (
<div className="loginBody">
<div className="formDiv">
<form className="loginForm" onSubmit={this.userLogin(value)}>
<select value="user1">
<option value="user1">User 1</option>
<option value="user2">User 2</option>
<option value="user3">User 3</option>
<option value="user4">User 4</option>
</select>
<button type="submit">Submit</button>
</form>
</div>
</div>
);
}
});
username
が<Feed>
と<Search>
のコンポーネントにどのように渡されるかわかりません。これらが<Login>
コンポーネントの子でない場合、どのように継承を確立しますか?
あなたのルートの設定で二度 'Login'を持っている..私はあなたが取り除くべきだと思います外部のものの 'Login'を' App'の子として保ちます。こうすることで、関数を介してAppに値を簡単に渡し、 'cloneElement'を使って他のルートに戻すことができます。どちらか、それともreduxを使うのですか? – azium
@ azium:あなたが提供してくれたガイダンスの一部を統合して、私の質問に文脈を追加しました。しかし、それでもユーザ名は ''に設定されておらず、API呼び出しに必要なユーザ名は ''と ''にどのように渡されるかわかりません。 –
zahabba