2018-10-10 18:03:03 -04:00
---
id: 5a24c314108439a4d4036172
title: Render State in the User Interface Another Way
challengeType: 6
isRequired: false
2019-08-28 16:26:13 +03:00
forumTopicId: 301408
2018-10-10 18:03:03 -04:00
localeTitle: Показывать состояние в пользовательском интерфейсе другим способом
---
## Description
2019-08-28 16:26:13 +03:00
< section id = 'description' >
Существует еще один способ доступа к < code > state< / code > в компоненте. В методе < code > render()< / code > перед оператором < code > return< / code > вы можете напрямую писать JavaScript. Например, вы можете объявлять функции, получать доступ к данным из < code > state< / code > или < code > props< / code > , выполнять вычисления по этим данным и т. Д. Затем вы можете назначить любые данные переменным, к которым у вас есть доступ в операторе < code > return< / code > .
< / section >
2018-10-10 18:03:03 -04:00
## Instructions
2019-08-28 16:26:13 +03:00
< section id = 'instructions' >
В < code > MyComponent< / code > метода отрисовки, определит < code > const< / code > называется < code > name< / code > и установите е г о равным значению имени в компоненте < code > state< / code > . Поскольку вы можете писать JavaScript непосредственно в этой части кода, вам не нужно вставлять эту ссылку в фигурные скобки. Затем в возвращаемом выражении выведите это значение в тег < code > h1< / code > используя < code > name< / code > переменной. Помните, что в операторе return вам нужно использовать синтаксис JSX (фигурные скобки для JavaScript).
< / section >
2018-10-10 18:03:03 -04:00
## Tests
< section id = 'tests' >
```yml
tests:
2019-08-28 16:26:13 +03:00
- text: < code > MyComponent</ code > should have a key < code > name</ code > with value < code > freeCodeCamp</ code > stored in its state.
testString: assert(Enzyme.mount(React.createElement(MyComponent)).state('name') === 'freeCodeCamp');
- text: < code > MyComponent</ code > should render an < code > h1</ code > header enclosed in a single < code > div</ code > .
testString: assert(/< div >< h1 > .*< \/h1 >< \/div > /.test(Enzyme.mount(React.createElement(MyComponent)).html()));
- text: The rendered < code > h1</ code > tag should include a reference to < code > {name}</ code > .
testString: getUserInput => assert(/< h1 > \n*\s*\{\s*name\s*\}\s*\n*< \/h1 > /.test(getUserInput('index')));
- text: The rendered < code > h1</ code > header should contain text rendered from the component' s state.
testString: 'async () => { const waitForIt = (fn) => new Promise((resolve, reject) => setTimeout(() => resolve(fn()), 250)); const mockedComponent = Enzyme.mount(React.createElement(MyComponent)); const first = () => { mockedComponent.setState({ name: ''TestName'' }); return waitForIt(() => mockedComponent.html()) }; const firstValue = await first(); assert(firstValue === ''< div > < h1 > TestName< / h1 > < / div > ''); };'
2018-10-10 18:03:03 -04:00
```
< / section >
## Challenge Seed
< section id = 'challengeSeed' >
< div id = 'jsx-seed' >
```jsx
class MyComponent extends React.Component {
constructor(props) {
super(props);
this.state = {
name: 'freeCodeCamp'
}
}
render() {
// change code below this line
// change code above this line
return (
< div >
{ /* change code below this line */ }
{ /* change code above this line */ }
< / div >
);
}
};
```
< / div >
2019-08-28 16:26:13 +03:00
### After Tests
2018-10-10 18:03:03 -04:00
< div id = 'jsx-teardown' >
2019-08-28 16:26:13 +03:00
```jsx
ReactDOM.render(< MyComponent / > , document.getElementById('root'))
2018-10-10 18:03:03 -04:00
```
< / div >
< / section >
## Solution
< section id = 'solution' >
2019-08-28 16:26:13 +03:00
```jsx
class MyComponent extends React.Component {
constructor(props) {
super(props);
this.state = {
name: 'freeCodeCamp'
}
}
render() {
// change code below this line
const name = this.state.name;
// change code above this line
return (
< div >
{ /* change code below this line */ }
< h1 > {name}< / h1 >
{ /* change code above this line */ }
< / div >
);
}
};
2018-10-10 18:03:03 -04:00
```
2019-08-28 16:26:13 +03:00
2018-10-10 18:03:03 -04:00
< / section >