Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 中继现代碎片容器数据未填充_Javascript_Reactjs_Graphql_Relaymodern_React Relay - Fatal编程技术网

Javascript 中继现代碎片容器数据未填充

Javascript 中继现代碎片容器数据未填充,javascript,reactjs,graphql,relaymodern,react-relay,Javascript,Reactjs,Graphql,Relaymodern,React Relay,我正在使用Relay Modern尝试将数据加载到碎片容器中。我使用的是熟悉的容器(Smart)/Presenter(Dumb)模式,数据没有按预期传递到我的子容器中。但是,如果我使用Relay的@Relay(mask:false)指令查看QueryRenderer是否正确加载了片段数据,片段数据就在那里 我不明白为什么数据没有被发送到我的容器。非常感谢您的帮助 ScreenContainer.js(呈现QueryRenderer): 最后,NestedFragmentContainer.js:

我正在使用Relay Modern尝试将数据加载到
碎片容器中
。我使用的是熟悉的容器(Smart)/Presenter(Dumb)模式,数据没有按预期传递到我的子容器中。但是,如果我使用Relay的
@Relay(mask:false)
指令查看
QueryRenderer
是否正确加载了片段数据,片段数据就在那里

我不明白为什么数据没有被发送到我的容器。非常感谢您的帮助

ScreenContainer.js
(呈现
QueryRenderer
):

最后,
NestedFragmentContainer.js

/* ScreenPresenter.js */

import NestedFragmentContainer from './NestedFragment';

export default class ScreenPresenter extends Component {
  render() {
    return <NestedFragmentContainer />
  }
}
/* ./NestedFragmentContainer.js */

class NestedFragmentContainer extends Component {
  render() {
    const { user } = this.props;
    console.log(user); // <-- Always null, not undefined
    return <Text>{user.account.name}</Text>;
  }
}
export default createFragmentContainer(
  NestedFragmentContainer,
  graphql`
    fragment NestedFragmentContainer_user on User {
      account {
        name
      }
    }
  `

有人知道为什么FragmentContainer没有使用其数据进行渲染吗?

如果数据真的来了或有错误,您应该在QueryRenderer组件中检查render函数。然后,如果数据在那里,你必须通过道具传递给用户。我没有太多地使用Relay,但我希望这能有所帮助

假设查询成功,数据需要传递到渲染组件。如文件中所述:

QueryRenderer是中继树的根。它接受一个查询,获取数据并使用数据调用呈现回调

在您的情况下,
queryRenderer
应该如下所示:

render() {
    return (
      <QueryRenderer
        environment={environment}
        query={query}
        variables={{id: id}}
        render={({error, props}) => {
          if (error) {
            return <div>{error.message}</div>
          } else if (props) {
            /*  Here is the crucial part */
            return < ScreenPresenter data={props.viewer} />               
          }
          return <div>Loading</div>
        }}
      />
    )
  }
}
render(){
返回(
{
如果(错误){
返回{error.message}
}否则如果(道具){
/*这里是关键部分*/
return
}
回装
}}
/>
)
}
}

然后,您可以将道具从容器组件(智能)传递到表示组件(哑)。

是否将用户道具的默认值设置为null?@IonutAchim否,我没有。这与数据屏蔽有关,请检查此项
Warning: createFragmentContainerSpecResolver: Expected prop `user` 
to be supplied to Relay(NestedFragmentContainer)`, but got 
`undefined`. Pass an explicit `null` if this is intentional.
render() {
    return (
      <QueryRenderer
        environment={environment}
        query={query}
        variables={{id: id}}
        render={({error, props}) => {
          if (error) {
            return <div>{error.message}</div>
          } else if (props) {
            /*  Here is the crucial part */
            return < ScreenPresenter data={props.viewer} />               
          }
          return <div>Loading</div>
        }}
      />
    )
  }
}