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. Когда мы хотим обновить его, нам просто нужно обновить состояние, и все дочерние компоненты будут обновлены. Подробнее об этом в главе «События».