【发布时间】:2018-05-15 00:33:55
【问题描述】:
我正在使用 Relay Modern 尝试将数据加载到 FragmentContainer。我正在使用熟悉的 Container (Smart) / Presenter (Dumb) 模式,并且数据没有按预期传递到我的子 Container 中。但是,如果我使用 Relay 的 @relay(mask: false) 指令来查看片段的数据是否被 QueryRenderer 正确加载,片段数据在那里。
我不明白为什么数据没有发送到我的容器。非常感谢任何帮助。
ScreenContainer.js(渲染QueryRenderer):
/* ScreenContainer.js */
import ScreenPresenter from './ScreenPreseenter';
const query = graphql`
query ScreenContainerQuery($id: ID!) {
viewer {
User(id: $id) {
id
...NestedFragmentContainer_user
}
}
}`
export default class ScreenContainer extends Component {
render() {
<QueryRenderer
query={query}
variables={{id: id}}
render={() => <ScreenPresenter />}
/>
}
}
ScreenPresenter.js:
/* ScreenPresenter.js */
import NestedFragmentContainer from './NestedFragment';
export default class ScreenPresenter extends Component {
render() {
return <NestedFragmentContainer />
}
}
最后,NestedFragmentContainer.js:
/* ./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
}
}
`
此外,每当NestedFragmentContainer 呈现时,我都会看到一个错误,即其user 属性为undefined。但是,console.log() 表明它的值实际上是null,而不是undefined。
Warning: createFragmentContainerSpecResolver: Expected prop `user`
to be supplied to Relay(NestedFragmentContainer)`, but got
`undefined`. Pass an explicit `null` if this is intentional.
有谁知道为什么 FragmentContainer 没有用其数据呈现?
【问题讨论】:
-
你有一个 defaultValue 设置为 null 的用户属性?
-
@IonutAchim 不,我没有。
标签: javascript reactjs graphql relaymodern react-relay