我正在使用反应故事书,并想知道如何为组件设置默认道具?
我的应用程序中的我的组件是一个轨道并获取数据 - 一个图像。这是使用{this.props.children}设置的。
在我的rails组件中,我想设置默认道具,以便在数据提取失败时仍然呈现项目。
这是我的组件 - 向下滚动底部以设置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 = {
};
这是获取成功时儿童道具的样子。
答案 0 :(得分:1)
您可以使用类名设置默认道具,如下所示。
class Greeting extends React.Component {
render() {
return (
<h1>Hello, {this.props.name}</h1>
);
}
}
// Specifies the default values for props:
Greeting.defaultProps = {
name: 'Stranger'
};
您可以参考此link from react's documentation了解详情。
答案 1 :(得分:0)
解决问题的一种方法是使用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>
);
答案 2 :(得分:0)
一种解决方法是导入“ 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