gpt4 book ai didi

javascript - Relay-Modern FragmentContainer 数据未填充

转载 作者:行者123 更新时间:2023-11-30 20:56:40 25 4
gpt4 key购买 nike

我正在使用 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 Prop 是 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 没有使用其数据呈现​​?

最佳答案

假设查询成功,数据需要传递给呈现的组件。正如 Relay 现代文档中所述:

QueryRenderer is the root of a Relay tree. It takes a query, fetches the data and calls the render callback with the data.

在您的情况下,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>
}}
/>
)
}
}

然后您将能够将 props 从容器组件(智能)传递到展示组件(愚蠢)。

关于javascript - Relay-Modern FragmentContainer 数据未填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47584319/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com