如何为对象类型设置React默认道具

Jun*_*ark 11 reactjs

我们已经知道,如何设置defaultProps.

TestComponent.defaultProps = {
    isTest: true
};
Run Code Online (Sandbox Code Playgroud)

但我经常使用道具作为对象类型.

在父母,

render(){
    let sample = {
        isTest : true,
        isLoggedIn : true
    }
    return (
        <div>
            <TestComponent sample = {sample} />
        </div>
    )
}
Run Code Online (Sandbox Code Playgroud)

在子组件,我想设置isLoggedInfalse默认.如果未设置(或未从Parent传递)isLoggedIn,则默认值为true

但我不知道如何设置defaultProps object type

TestComponent.defaultProps = {
    sample : {
        isLoggedIn: false
    }
};
Run Code Online (Sandbox Code Playgroud)

这该怎么做 ?

Cod*_*Cat 9

你的代码

TestComponent.defaultProps = {
  sample : {
    isLoggedIn: false
  }
};
Run Code Online (Sandbox Code Playgroud)

应该管用。

对于类型验证(propTypes),使用React.PropTypes.shape嵌套对象道具,如下所示:

React.PropTypes.shape({
  isLoggedIn: React.PropTypes.bool
})
Run Code Online (Sandbox Code Playgroud)

查看文档:https : //facebook.github.io/react/docs/typechecking-with-proptypes.html#react.proptypes

  • @CodinCat 您只能为隐式 `props` 声明值。`isLoggedIn` 不是 `prop` 而是 `sample` 的一个属性。我很确定您在上面展示的内容是不可能的。或者你可以制作一个工作小提琴? (5认同)
  • 该代码仅在您未通过“示例”道具时才有效。但是如果你像假设一个空对象那样传递它,跳过“isLoggedIn”值,那么 defaultProp 将不会被应用。试试看:https://codepen.io/anon/pen/aVoZLY?editors=1010 (4认同)