4.0 KiB
id, title, challengeType, forumTopicId, dashedName
id | title | challengeType | forumTopicId | dashedName |
---|---|---|---|---|
5a24c314108439a4d4036170 | ステートフルコンポーネントを作成する | 6 | 301391 | create-a-stateful-component |
--description--
React で最も重要なトピックの一つとなっているのが state
です。 state (状態、ステート) は、アプリケーションが認識する必要のあるデータで構成され、時間とともに変化する可能性があります。 アプリでは通常、必要に応じて状態の変化に応答し、更新された UI を表示します。 React は、最新のウェブアプリケーションの状態管理に適したソリューションを備えています。
React コンポーネントで state を作成するには、constructor
のコンポーネントクラスで state
プロパティを宣言します。 これにより、コンポーネントが作成時に state
で初期化されます。 state
プロパティは JavaScript の object
に設定する必要があります。 宣言は次のようになります。
this.state = {
}
コンポーネントが存在している間は、state
オブジェクトにアクセスすることができます。 更新したり、UI にレンダーしたり、props として子コンポーネントに渡したりすることができます。 state
オブジェクトは必要に応じて単純なものにも複雑なものにもすることができます。 こうした state
を作成するには、React.Component
を拡張してクラスコンポーネントを作成する必要があります。
--instructions--
コードエディターにあるコンポーネントでは、state
から name
プロパティをレンダーしようとしています。 しかし、state
が定義されていません。 constructor
で state
を使用してコンポーネントを初期化し、name
というプロパティに名前を割り当ててください。
--hints--
StatefulComponent
が存在し、レンダーする必要があります。
assert(
(function () {
const mockedComponent = Enzyme.mount(
React.createElement(StatefulComponent)
);
return mockedComponent.find('StatefulComponent').length === 1;
})()
);
StatefulComponent
で div
および h1
要素をレンダーします。
assert(
(function () {
const mockedComponent = Enzyme.mount(
React.createElement(StatefulComponent)
);
return (
mockedComponent.find('div').length === 1 &&
mockedComponent.find('h1').length === 1
);
})()
);
StatefulComponent
の state を初期化し、プロパティ name
に文字列を設定します。
assert(
(function () {
const mockedComponent = Enzyme.mount(
React.createElement(StatefulComponent)
);
const initialState = mockedComponent.state();
return (
typeof initialState === 'object' && typeof initialState.name === 'string'
);
})()
);
StatefulComponent
の state にあるプロパティ name
を h1
要素にレンダーします。
assert(
(function () {
const mockedComponent = Enzyme.mount(
React.createElement(StatefulComponent)
);
const initialState = mockedComponent.state();
return mockedComponent.find('h1').text() === initialState.name;
})()
);
--seed--
--after-user-code--
ReactDOM.render(<StatefulComponent />, document.getElementById('root'))
--seed-contents--
class StatefulComponent extends React.Component {
constructor(props) {
super(props);
// Only change code below this line
// Only change code above this line
}
render() {
return (
<div>
<h1>{this.state.name}</h1>
</div>
);
}
};
--solutions--
class StatefulComponent extends React.Component {
constructor(props) {
super(props);
this.state = {
name: 'freeCodeCamp!'
}
}
render() {
return (
<div>
<h1>{this.state.name}</h1>
</div>
);
}
};