Рубрики
Без рубрики

Реагировать На Рендеринг Реквизита

Узнайте, как визуализация реквизитов может помочь вам создать приложение React

Общим шаблоном, используемым для совместного использования состояния между компонентами, является использование дочерних реквизитов.

Внутри компонента JSX вы можете отобразить {this.props.children} , который автоматически вставляет любой JSX, переданный в родительский компонент в качестве дочернего:

class Parent extends React.Component {
  constructor(props) {
    super(props)
    this.state = {
      /*...*/
    }
  }

  render() {
    return 
{this.props.children}
} } const Children1 = () => {} const Children2 = () => {} const App = () => ( )

Однако здесь есть проблема: состояние родительского компонента не может быть доступно из дочерних компонентов.

Чтобы иметь возможность совместно использовать состояние, вам необходимо использовать компонент поддержки визуализации, и вместо передачи компонентов в качестве дочерних элементов родительского компонента вы передаете функцию, которую затем выполняете в {this.props.children()} . Функция может принимать аргументы,:

class Parent extends React.Component {
  constructor(props) {
    super(props)
    this.state = { name: 'Flavio' }
  }

  render() {
    return 
{this.props.children(this.state.name)}
} } const Children1 = props => { return

{props.name}

} const App = () => {name => }

Вместо использования дочерней опоры, которая имеет очень специфическое значение, вы можете использовать любую опору, и поэтому вы можете использовать этот шаблон несколько раз для одного и того же компонента:

class Parent extends React.Component {
  constructor(props) {
    super(props)
    this.state = { name: 'Flavio', age: 35 }
  }

  render() {
    return (
      

Test

{this.props.someprop1(this.state.name)} {this.props.someprop2(this.state.age)}
) } } const Children1 = props => { return

{props.name}

} const Children2 = props => { return

{props.age}

} const App = () => ( } someprop2={age => } /> ) ReactDOM.render(, document.getElementById('app'))

Оригинал: “https://flaviocopes.com/react-render-props/”