* feat(tools): add seed/solution restore script * chore(curriculum): remove empty sections' markers * chore(curriculum): add seed + solution to Chinese * chore: remove old formatter * fix: update getChallenges parse translated challenges separately, without reference to the source * chore(curriculum): add dashedName to English * chore(curriculum): add dashedName to Chinese * refactor: remove unused challenge property 'name' * fix: relax dashedName requirement * fix: stray tag Remove stray `pre` tag from challenge file. Signed-off-by: nhcarrigan <nhcarrigan@gmail.com> Co-authored-by: nhcarrigan <nhcarrigan@gmail.com>
3.3 KiB
3.3 KiB
id, title, challengeType, forumTopicId, dashedName
id | title | challengeType | forumTopicId | dashedName |
---|---|---|---|---|
5a24c314108439a4d4036170 | 创建一个有状态的组件 | 6 | 301391 | create-a-stateful-component |
--description--
React中最重要的主题之一是state
。 state 包含应用程序需要了解的任何数据,这些数据可能会随时间而变化。你希望应用程序能够响应 state 的变更,并在必要时显示更新后的 UI。React 为现代 Web 应用程序的状态管理提供了一个很好的解决方案。
你可以通过在constructor
中的组件类上声明state
属性来在 React 组件中创建 state,它在创建时使用state
初始化组件。state
属性必须设置为 JavaScript对象
。声明如下:
this.state = {
// describe your state here
}
你可以在组件的整个生命周期内访问state
对象,你可以更新它、在 UI 中渲染它,也可以将其作为 props 传递给子组件。state
对象的使用可以很简单,亦可以很复杂,就看你怎么用了。请注意,你必须通过扩展React.Component
来创建类组件,以便像这样创建state
。
--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
);
})()
);
应使用被设置为字符串的name
属性来初始化StatefulComponent
的 state。
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>
);
}
};