ReactJS - Обзор свойств
Основное различие между состоянием и реквизитом состоит в том, что propsнеизменны. Вот почему компонент контейнера должен определять состояние, которое может быть обновлено и изменено, в то время как дочерние компоненты должны передавать данные только из состояния с помощью свойств.
Использование реквизита
Когда нам нужны неизменяемые данные в нашем компоненте, мы можем просто добавить свойства в reactDOM.render() функционировать в main.js и используем его внутри нашего компонента.
App.jsx
import React from 'react';
class App extends React.Component {
render() {
return (
<div>
<h1>{this.props.headerProp}</h1>
<h2>{this.props.contentProp}</h2>
</div>
);
}
}
export default App;
main.js
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.jsx';
ReactDOM.render(<App headerProp = "Header from props..." contentProp = "Content
from props..."/>, document.getElementById('app'));
export default App;
Это даст следующий результат.
Свойства по умолчанию
Вы также можете установить значения свойств по умолчанию непосредственно в конструкторе компонента вместо того, чтобы добавлять его в reactDom.render() элемент.
App.jsx
import React from 'react';
class App extends React.Component {
render() {
return (
<div>
<h1>{this.props.headerProp}</h1>
<h2>{this.props.contentProp}</h2>
</div>
);
}
}
App.defaultProps = {
headerProp: "Header from props...",
contentProp:"Content from props..."
}
export default App;
main.js
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.jsx';
ReactDOM.render(<App/>, document.getElementById('app'));
Выход такой же, как и раньше.
Состояние и реквизит
В следующем примере показано, как объединить stateи реквизит в вашем приложении. Мы устанавливаем состояние в нашем родительском компоненте и передаем его вниз по дереву компонентов, используяprops. Внутриrender функция, мы устанавливаем headerProp и contentProp используется в дочерних компонентах.
App.jsx
import React from 'react';
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
header: "Header from props...",
content: "Content from props..."
}
}
render() {
return (
<div>
<Header headerProp = {this.state.header}/>
<Content contentProp = {this.state.content}/>
</div>
);
}
}
class Header extends React.Component {
render() {
return (
<div>
<h1>{this.props.headerProp}</h1>
</div>
);
}
}
class Content extends React.Component {
render() {
return (
<div>
<h2>{this.props.contentProp}</h2>
</div>
);
}
}
export default App;
main.js
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.jsx';
ReactDOM.render(<App/>, document.getElementById('app'));
Результат снова будет таким же, как и в предыдущих двух примерах, единственное, что отличается, - это источник наших данных, который теперь изначально исходит из state. Когда мы хотим обновить его, нам просто нужно обновить состояние, и все дочерние компоненты будут обновлены. Подробнее об этом в главе «События».