如何为包装在 Raley 容器中的组件设置默认道具?

Posted

技术标签:

【中文标题】如何为包装在 Raley 容器中的组件设置默认道具?【英文标题】:How do I set default props for a component wrapped in a Raley container? 【发布时间】:2017-05-20 13:02:43 【问题描述】:

我有一个组件包装在 Relay 容器中:

const Widget = (props) => 
  return (
   <div>  props.foo.bar  </div>
  )


Widget.defaultProps =  foo: bar: 0 

export default Relay.createContainer(Widget, 
  fragments: 
     store: () => Relay.QL`
       fragment on WidgetData 
          foo 
             bar
          
        
        `
   
)

我使用 GraphQL 即服务提供程序作为后端,当 WidgetDatafoo 属性不存在时,它返回 null,当我的组件尝试渲染时抛出props.null.bar

据我所知,defaultProps 仅在 prop 为 undefined 时有效,而在 null 时无效。

在这种情况下,如何使用defaultProps 防止null 结果?

如果可能,希望避免为我引用的每个 prop 编写保护语句。

【问题讨论】:

可以手动覆盖构造函数:const bar = props.foo || 'default'&lt;div&gt; bar &lt;/div&gt; 是的,这就是我现在正在做的事情,但是使用很多/深度嵌套的道具会变得非常乏味。 defaultProps 感觉更合身,尤其是。因为我已经为propTypes 定义了我的prop 形状 我已经通过将 Relay 查询向上移动到包含组件并传递结果来解决它。这样我就不会在我想使用defaultProps 的级别上使用 Relay。这可能不适用于您的情况。 【参考方案1】:

您可以对 Relay 容器中的道具进行完整性检查。

render() 
  let 
    foo,
    ...other
   = this.props;   
  let bar = foo ? foo.bar : '';
  return (
    <div>  bar  </div>
  )

欲了解更多信息,请结帐:https://github.com/bfwg/relay-gallery

【讨论】:

以上是关于如何为包装在 Raley 容器中的组件设置默认道具?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 React TypeScript 组件上的 props 设置默认值?

如何为我的 React 表单组件中的选择菜单设置默认值?

RelayJS:如何通过道具设置初始变量

react-native 中的小问题活动指标 |组件 |组件内的道具 |道具 |设置状态

使用 TypeScript 3 扩展道具的 React 组件中的默认属性值

Angular - 如何为可选输入属性设置默认值