[英]How can I get Relay Modern fragment composition to work?
我正在努力了解如何讓片段組合正常工作。 我有一個root <QueryRenderer />
,它包含我需要的片段。 我可以看到片段被合並,查詢返回我需要的所有數據。 數據傳遞到我的頁面中的主渲染節點,但是當它傳遞給子節點時,Relay會抱怨:
Warning: RelayModernSelector: Expected object to contain data for fragment `BoardControlsComponent_processMeta`, got `{"item": 1, "name": "Test"}`. Make sure that the parent operation/fragment included fragment `...BoardControlsComponent_processMeta`.
代碼 :
export let BoardContainer = createFragmentContainer(BoardComponent, {
processMeta: NavbarFragment.processMeta,
});
export const Board = ({match}) => {
return (<QueryRenderer
environment={environment}
variables={{
processId: match.params.processId,
boardType: match.params.boardType,
boardClass: match.params.boardClass
}}
query={BoardDataQuery}
render={({error, props}) => {
if (error) {
return <div>{error.message}</div>;
} else if (props) {
//console.log(props);
return (<BoardContainer {...props} match={match}/>);
}
return <ProgressBar active now={100} />;
}}
/>
);
};
在BoardComponent的render()中:
<BoardControlsContainer processMeta={this.props.processMeta} />
BoardDataQuery :
export const BoardDataQuery = graphql`
query BoardDataQuery($processId: Int!, $boardClass: String!, $boardType: String!) {
processMeta(processId: $processId, boardClass: $boardClass, boardType: $boardType) {
...NavbarComponent_processMeta
...BoardControlsComponent_processMeta
}
}
`;
BoardControlsContainer :
export const BoardControlsContainer = createFragmentContainer(BoardControlsComponent, {
processMeta: BoardControlsFragment.processMeta
});
因此,BoardDataQuery包含2個組件的ProcessMeta字段,並在瀏覽器中檢查網絡調試控制台確認所有數據都按要求返回。 將此數據作為prop傳遞將導致Relay抱怨,因為它期望片段而不是填充對象。 不僅如此,而且傳遞的實際對象沒有指定的額外字段。
我在這做錯了什么?
事實證明,這是我對Relay如何組成片段的誤解。
首先,如果目標組件沒有按照命名標准定義片段,則Relay將僅傳遞內部對象。
其次,即使片段被組合到根查詢中以便使用數據,每個組件也必須指定其自己的數據要求。 基本上我需要在BoardDataQuery中添加額外的字段,以便它們可用於BoardContainer
組件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.