0
ファイルIDの束がlocalStorageからロードされるページがあり、コンポーネントが新しいプロップをマウント/受信すると、setVariables
が呼び出されます。これが機能し、新しい変数が設定されている間、最初の変数の結果がトランジション中に使用されます。これは、奇数のちらつきの原因となります。リレーは、最後の変数ではなく、setVariablesトランジション中に初期変数を使用します。
なぜ、リレーでは、移行中に何か違うのですか?私が期待するのは、this.props.viewer.files.hits
は前の呼び出しと同じになりますが、setVariables
は初期の変数を使用した結果ではなく、そのことをやっているということになります。
const enhance = compose(
lifecycle({
componentDidMount() {
const { files, relay } = this.props
if (files.length) {
relay.setVariables(getCartFilterVariables(files))
}
},
}),
shouldUpdate((props, nextProps) => {
if (props.files.length !== nextProps.files.length && nextProps.files.length) {
props.relay.setVariables(getCartFilterVariables(nextProps.files))
}
return true
})
)
export { CartPage }
export default Relay.createContainer(
connect(state => state.cart)(enhance(CartPage)), {
initialVariables: {
first: 20,
offset: 0,
filters: {},
getFiles: false,
sort: '',
},
fragments: {
viewer:() => Relay.QL`
fragment on Root {
summary {
aggregations(filters: $filters) {
project__project_id {
buckets {
case_count
doc_count
file_size
key
}
}
fs { value }
}
}
files {
hits(first: $first, offset: $offset, filters: $filters, sort: $sort) {
${FileTable.getFragment('hits')}
}
}
}
`,
},
}
)