【问题标题】:GraphQL Apollo query options do not take defaultPropsGraphQL Apollo 查询选项不采用 defaultProps
【发布时间】:2018-04-25 07:05:28
【问题描述】:

我正在使用查询选项为我的查询传递动态变量,但似乎如果我设置defaultProps,graphql 无法获取道具值。

我的代码如下:

Page.defaultProps = {
   startDate: moment().hour(15).toISOString(),
   endDate: moment().add(1).hour(3).toISOString(),
};


export default compose(graphql(myQuery, { options: (props: IPageProps) => ({ variables: { range: { start: props.startDate, end: props.endDate }}}))(Page);

注销props表明组件加载时defaultProps需要时间才能真正包含进来,变量总是会变成{ startDate: undefined, endDate: undefined }

有没有更好的处理方法?

【问题讨论】:

    标签: reactjs graphql apollo


    【解决方案1】:

    这很棘手。最简单的事情就是声明默认值两次:

    const DEFAULT_START = moment().hour(15).toISOString()
    const DEFAULT_END = moment().add(1).hour(3).toISOString()
    
    Page.defaultProps = {
       startDate: DEFAULT_START,
       endDate: DEFAULT_END,
    }
    
    const options = ({ startDate: start = DEFAULT_START, endDate: end = DEFAULT_END }) => ({ variables: { range: { start, end } } })
    
    export default compose(graphql(myQuery, { options })(Page);
    

    如果您不需要在查询之外引用 startDateendDate,这样做意味着您可以完全跳过将它们包含为 defaultProps

    【讨论】:

    • 这实际上是有道理的,我最终用另一个更高阶的组件包装了该组件,并将道具传递给它。好建议!
    猜你喜欢
    • 2018-10-19
    • 2021-07-04
    • 2020-10-01
    • 2018-03-02
    • 2021-07-04
    • 2018-02-10
    • 2019-01-07
    • 2018-06-13
    • 1970-01-01
    相关资源
    最近更新 更多