Реагировать Установить Пропорции по умолчанию на this.props.children - PullRequest
0 голосов
/ 26 апреля 2018

Я работаю с Сборником рассказов о реакции и задаюсь вопросом, как я могу установить реквизиты по умолчанию для компонента?

Мой компонент в моем приложении представляет собой рельс и извлекает данные - изображение. Это устанавливается с помощью {this.props.children}.

В моем компоненте Rail я хочу установить реквизиты по умолчанию, чтобы элементы по-прежнему отображались, если выборка данных не удалась.

Вот мой компонент - прокрутите вниз для настройки defaultProps:

import React, { Component } from 'react';
import './index.css'; // styles from

// import Slider from 'react-slick';
import classNames from 'classnames';

import PrimaryButton from '../PrimaryButton';

export default class HeroRail extends Component{
  render() {
    const {title, icon, opacity, railActive} = this.props;
    const railStyle = {
      opacity:opacity
    };
    const iconStyle = {
      background: `center / contain url(${icon}) no-repeat`
    };
    const cName = classNames('HeroRail', {
      railActive:railActive
    });   

    console.log("props", this.props);

    return (
      <div className={cName} style={railStyle}>
        <div className={'rail-details'}>
          <div className={'top-details'}>
            <div className={'title-lockup'}>
              <div className={'icon'} style={iconStyle}></div>
              <h3 className={'rail-title'}>{title}</h3>
            </div>
            <PrimaryButton label={'View All'} light={true}/>
          </div>

          <div className={'rail-navigation'}>
            <PrimaryButton icon='' light={true} />
            <PrimaryButton icon='' light={true} />
          </div>
        </div>

        <div className={'rail-items'}>
          {this.props.children}
        </div>
      </div>
    );
  }
};

HeroRail.defaultProps = {

};

Вот как выглядит детская опора, когда выборка успешна.

enter image description here

Ответы [ 3 ]

0 голосов
/ 26 апреля 2018

Вы можете установить реквизиты по умолчанию, используя имя класса, как показано ниже.

class Greeting extends React.Component {
  render() {
    return (
      <h1>Hello, {this.props.name}</h1>
    );
  }
}

// Specifies the default values for props:
Greeting.defaultProps = {
  name: 'Stranger'
};

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

0 голосов
/ 17 августа 2018

Одним из способов решения этой проблемы является импорт компонента prop-types, см. Следующий пример: -

import PropTypes from 'prop-types';

const propertyType = ({[name_of_property]}) => {
  <div><h1>{name_of_property}</h1></div>
};

propertyType.propTypes = {
  [name_of_property]: PropTypes.string,
};
propertyType.defaultProps ={
  [name_of_property]: [default_value],
};

Прочтите это, когда сможете: https://www.npmjs.com/package/prop-types

0 голосов
/ 26 апреля 2018

Одним из способов решения этой проблемы является использование static propTypes

static propTypes = {
    children: PropTypes.node.isRequired,
}

Еще один способ решить проблему, которую я рекомендую, - не отображать компонент, если вы не получили значение

if(!this.props.children){
    return(<div>Loading ....... </div>
}
 return (
      <div className={cName} style={railStyle}>
        <div className={'rail-details'}>
          <div className={'top-details'}>
            <div className={'title-lockup'}>
              <div className={'icon'} style={iconStyle}></div>
              <h3 className={'rail-title'}>{title}</h3>
            </div>
            <PrimaryButton label={'View All'} light={true}/>
          </div>

          <div className={'rail-navigation'}>
            <PrimaryButton icon='' light={true} />
            <PrimaryButton icon='' light={true} />
          </div>
        </div>

        <div className={'rail-items'}>
          {this.props.children}
        </div>
      </div>
    );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...