Reactjs 如何让QueryRenderer传播父属性更改? 使用继电器现代V.1.4.1,考虑以下列表< /代码>组件.< /P>

Reactjs 如何让QueryRenderer传播父属性更改? 使用继电器现代V.1.4.1,考虑以下列表< /代码>组件.< /P>,reactjs,relayjs,relay,relaymodern,Reactjs,Relayjs,Relay,Relaymodern,它使用两个道具foo和bar,并使用这些道具和GraphQL查询的结果呈现一个表组件: class List extends React.Component { constructor(props) { super(props); // I accept this.props.foo and this.props.bar this.renderQuery = this.renderQuery.bind(this); } render() { ret

它使用两个道具
foo
bar
,并使用这些道具和GraphQL查询的结果呈现一个
组件:

class List extends React.Component {

  constructor(props) {
    super(props);
    // I accept this.props.foo and this.props.bar
    this.renderQuery = this.renderQuery.bind(this);
  }

  render() {
    return <QueryRenderer
      environment={this.props.relayEnvironment}
      query={SomeQuery}
      variables={{
        count: 20,
      }}
      render={this.renderQuery}
    />;
  }

  renderQuery(readyState) {
    console.log("List component props:");
    console.log(this.props);
    return <Table 
      foo={this.props.foo} bar={this.props.bar} 
      data={readyState.data}
    />
  }

}



有什么想法吗?

删除类组件,并将上述代码更改为:

const List = (parentProps) => (
  <QueryRenderer
    environment={parentProps.relayEnvironment}
    query={SomeQuery}
    variables={{
      count: 20,
    }}
    render={({ props }) => (
      <Table 
        foo={this.parentProps.foo} bar={this.parentProps.bar} 
        data={props.data}
      />
    )}
  />
)
const List=(parentProps)=>(
(
)}
/>
)
QueryRenderer本身已经是一个React组件,您通常不必将其包装在类组件呈现中

列表现在是一个纯函数组件,当它接收到新的props(parentProps)时,它将重新呈现,因此表将重新呈现

<QueryRenderer
  environment={this.props.relayEnvironment}
  query={SomeQuery}
  variables={{
    count: 20,
  }}
  render={this.renderQuery}
  {...this.props}
/>
const List = (parentProps) => (
  <QueryRenderer
    environment={parentProps.relayEnvironment}
    query={SomeQuery}
    variables={{
      count: 20,
    }}
    render={({ props }) => (
      <Table 
        foo={this.parentProps.foo} bar={this.parentProps.bar} 
        data={props.data}
      />
    )}
  />
)