これは、ReactJSの新しいスターターからのものです。簡単に把握できるリソースが利用できないため、SOをもう一度叩きます。問題はこれです。Reactコンポーネント、つまりRegisterAccount
クリックすると別のコンポーネント(ポップアップ)が撮影され、ユーザーは必要な詳細を入力してアカウントを登録できます。アカウントが正常に登録されたら、登録したアカウントを別のコンポーネントとしてRegisterAccount
に追加します。この通信を設定するにはどうすればよいですか?
//In RegisterAccount
<addAccount/> //pop-up
<accountAdded/> //if account added, then show this component
Reactは初めてです。私も方法を見つけていました。そして私はこれを見た 記事 !下のように言う
render : function()
{
return (
<div>
{ true && <AddAccount /> }
{ false && <AccountAdded /> }
</div>
);
}
質問を正しく理解した場合、状態が変化したときに表示するコンポーネントを更新しようとしている(たとえば、ユーザーがアカウントを作成した)場合、その状態は子コンポーネントによって変更されます。これは、子->親のコミュニケーションを示す基本的な例です。
この場合、RegisterAccount
コンポーネントはルートコンポーネントです。この例で使用されているhasAccount
状態も知る必要がある別のコンポーネントの子である場合、状態はチェーンの上位に格納(およびプロップとして渡される)したほうがよいでしょう。 。
/** @jsx React.DOM */
var AddAccount = React.createClass({
handleRegistration: function() {
this.props.updateAccount(true);
},
render: function() {
return <a onClick={this.handleRegistration}>Create my account</a>;
}
});
var AccountAdded = React.createClass({
render: function() {
return <span>Account exists now</span>;
}
});
var RegisterAccount = React.createClass({
getInitialState: function() {
return {
hasAccount: false
};
},
updateAccountStatus: function(status) {
this.setState({
hasAccount: status
});
},
render: function() {
return (
<div>
{this.state.hasAccount ? <AccountAdded /> : <AddAccount updateAccount={this.updateAccountStatus} />}
</div>
);
}
});
React.renderComponent(<RegisterAccount />, document.body);
また、次のことを行うこともでき、プロパティconditionがtrueまたはfalseを返すかどうかに応じて、レンダリングするかどうかを指定できます。これは単なる例であり、条件はメソッドなどからも発生する可能性があります。
export class MyClass extends React.Component{
...
render(){
<div>
<img src='someSource' />
{this.state.condition ? <MyElement /> : null}
</div>
}
}
より詳細な情報 こちら もご覧ください。
あなたのレンダー関数では、条件付きで表示されるタグを持つ変数を持つことができます...このようなものです:
render: function(){
var conditionalTag;
if(conditionalTag) <AccountAdded/>
return (
<AddAccount/>
{ conditionalTag }
)
}
conditionalTagは、変数にjsxが含まれている場合にのみレンダリングされます