Zha*_* Yi 119 ecmascript-6 reactjs
我使用下面的代码在React组件上设置默认道具,但它不起作用.在该render()方法中,我可以看到输出"未定义道具"已打印在浏览器控制台上.如何为组件道具定义默认值?
export default class AddAddressComponent extends Component {
render() {
let {provinceList,cityList} = this.props
if(cityList === undefined || provinceList === undefined){
console.log('undefined props')
}
...
}
AddAddressComponent.contextTypes = {
router: React.PropTypes.object.isRequired
}
AddAddressComponent.defaultProps = {
cityList: [],
provinceList: [],
}
AddAddressComponent.propTypes = {
userInfo: React.PropTypes.object,
cityList: PropTypes.array.isRequired,
provinceList: PropTypes.array.isRequired,
}
Run Code Online (Sandbox Code Playgroud)
Ser*_*iuk 129
你忘了关上Class支架了.
class AddAddressComponent extends React.Component {
render() {
let {provinceList,cityList} = this.props
if(cityList === undefined || provinceList === undefined){
console.log('undefined props')
} else {
console.log('defined props')
}
return (
<div>rendered</div>
)
}
}
AddAddressComponent.contextTypes = {
router: React.PropTypes.object.isRequired
};
AddAddressComponent.defaultProps = {
cityList: [],
provinceList: [],
};
AddAddressComponent.propTypes = {
userInfo: React.PropTypes.object,
cityList: React.PropTypes.array.isRequired,
provinceList: React.PropTypes.array.isRequired,
}
ReactDOM.render(
<AddAddressComponent />,
document.getElementById('app')
)Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="app" />Run Code Online (Sandbox Code Playgroud)
tre*_*son 88
对于那些使用babel stage-2或transform-class-properties之类的东西:
import React, { PropTypes, Component } from 'react';
export default class ExampleComponent extends Component {
static contextTypes = {
// some context types
};
static propTypes = {
prop1: PropTypes.object
};
static defaultProps = {
prop1: { foobar: 'foobar' }
};
...
}
Run Code Online (Sandbox Code Playgroud)
更新
从React v15.5开始,PropTypes被移出主React包(链接):
import PropTypes from 'prop-types';
Run Code Online (Sandbox Code Playgroud)
编辑
正如@johndodo所指出的,static类属性实际上不是ES7规范的一部分,而是目前只有babel支持.更新以反映这一点.
Bri*_*rns 26
如果您使用的是功能组件,则可以在解构赋值中定义默认值,如下所示:
export default ({ children, id="menu", side="left", image={menu} }) => {
...
};
Run Code Online (Sandbox Code Playgroud)
Ila*_*nus 13
首先,您需要将您的课程与其他扩展分开,前提是您无法将其扩展AddAddressComponent.defaultProps到class外部.
我还建议您阅读 构造函数和React的生命周期:请参阅组件规范和生命周期
这是你想要的:
import PropTypes from 'prop-types';
class AddAddressComponent extends React.Component {
render() {
let { provinceList, cityList } = this.props;
if(cityList === undefined || provinceList === undefined){
console.log('undefined props');
}
}
}
AddAddressComponent.contextTypes = {
router: PropTypes.object.isRequired
};
AddAddressComponent.defaultProps = {
cityList: [],
provinceList: [],
};
AddAddressComponent.propTypes = {
userInfo: PropTypes.object,
cityList: PropTypes.array.isRequired,
provinceList: PropTypes.array.isRequired,
}
export default AddAddressComponent;
Run Code Online (Sandbox Code Playgroud)
小智 8
您还可以使用解构分配.
class AddAddressComponent extends React.Component {
render() {
const {
province="insertDefaultValueHere1",
city="insertDefaultValueHere2"
} = this.props
return (
<div>{province}</div>
<div>{city}</div>
)
}
}
Run Code Online (Sandbox Code Playgroud)
我喜欢这种方法,因为您不需要编写太多代码.
使用静态defaultProps,如:
export default class AddAddressComponent extends Component {
static defaultProps = {
provinceList: [],
cityList: []
}
render() {
let {provinceList,cityList} = this.props
if(cityList === undefined || provinceList === undefined){
console.log('undefined props')
}
...
}
AddAddressComponent.contextTypes = {
router: React.PropTypes.object.isRequired
}
AddAddressComponent.defaultProps = {
cityList: [],
provinceList: [],
}
AddAddressComponent.propTypes = {
userInfo: React.PropTypes.object,
cityList: PropTypes.array.isRequired,
provinceList: PropTypes.array.isRequired,
}
Run Code Online (Sandbox Code Playgroud)
取自:https: //github.com/facebook/react-native/issues/1772
如果您想检查类型,请参阅如何在treyhakanson或Ilan Hasanov的答案中使用PropTypes,或查看上述链接中的许多答案.
您可以使用类名称设置默认道具,如下所示。
class Greeting extends React.Component {
render() {
return (
<h1>Hello, {this.props.name}</h1>
);
}
}
// Specifies the default values for props:
Greeting.defaultProps = {
name: 'Stranger'
};
Run Code Online (Sandbox Code Playgroud)
您可以使用此链接中的 React 推荐方式来获取更多信息
| 归档时间: |
|
| 查看次数: |
191111 次 |
| 最近记录: |