react-relay
Version:
A framework for building GraphQL-driven React applications.
37 lines (31 loc) • 959 B
Flow
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow strict-local
* @format
* @oncall relay
*/
;
import type {Variables} from 'relay-runtime';
const areEqual = require('areEqual');
const {useState} = require('react');
/**
* Memoizes the passed in `variables` object based on `areEqual` equality.
* This is useful when a `variables` object is used as a value in a depencency
* array as it might often be constructed during render.
*/
hook useMemoVariables<TVariables: Variables | null>(
variables: TVariables,
): TVariables {
const [mirroredVariables, setMirroredVariables] = useState(variables);
if (areEqual(variables, mirroredVariables)) {
return mirroredVariables;
} else {
setMirroredVariables(variables);
return variables;
}
}
module.exports = useMemoVariables;