Giter VIP home page Giter VIP logo

Comments (8)

sijad avatar sijad commented on June 26, 2024 3

no, I did not, but I guess with memorized version you can actually prevent re-rendering e.g:

const mutate = useMutation(MUTATION)
const memoizedMutation = useCallback(() => {
  mutate({
    variables,
  });
}, [mutate]);

return (<button onClick={memoizedMutation}>click on me</button>);

with current implimention mutate always have a new value therefore it might re-render more...

from react-apollo-hooks.

avocadowastaken avatar avocadowastaken commented on June 26, 2024 1

Checking for mutation itself is not enough, we have to check for changes of options parameters, and this will create unnecessary memoization most of the times.

Anyways, React team does not suggest to pass individual callbacks in props and there is (not ideal) solution for this. I hope they will come up with better idea.

But if you don't like it, you still can use your own hook for memoization , e.g:

function useMemoMutation(mutation, options, inputs) {
   return useCallback(useMutation(mutation, option), inputs);
}

function Foo({ bar, baz }) {
  const mutate = useMemoMutation(Mutate, {
    variables: { bar, baz }
  }, [bar, baz]) // Update only on `bar` or `baz` change
}

from react-apollo-hooks.

trojanowski avatar trojanowski commented on June 26, 2024

@sijad Have you tried to profile it if the version with memoization is really faster than the current one?

from react-apollo-hooks.

avocadowastaken avatar avocadowastaken commented on June 26, 2024

We also can useRef to imitate this in class components:

export function useMutation<TData, TVariables = OperationVariables>(
  mutation: DocumentNode,
  baseOptions?: MutationHookOptions<TData, TVariables>
): MutationFn<TData, TVariables> {
  const client = useApolloClient();

  // Use refs to access variable values inside callback.
  const mutationRef = useRef(mutation);
  const baseOptionsRef = useRef(baseOptions);

  // Update references on each render.
  mutationRef.current = mutation;
  baseOptionsRef.current = baseOptions;

  // Memoize callback.
  const mutationFnRef = useRef<MutationFn<TData, TVariables>>(options =>
    client.mutate({
      mutation: mutationRef.current,
      ...baseOptionsRef.current,
      ...options,
    })
  );

  return mutationFnRef.current;
}

from react-apollo-hooks.

rovansteen avatar rovansteen commented on June 26, 2024

A downside of not memoizing the value of useMutation or useQuery is that they break the memoization of hooks that are built on top of them if you follow the rules (and eslint plugin) for hooks strictly.

from react-apollo-hooks.

sijad avatar sijad commented on June 26, 2024

I just leave @gaearon's comment here.

in my test objToKey seems slower that deep equal.

from react-apollo-hooks.

prztrz avatar prztrz commented on June 26, 2024

should not this be closed by apollographql/react-apollo#3260 ?

from react-apollo-hooks.

fbartho avatar fbartho commented on June 26, 2024

@prztrz this library doesn’t use React-apollo’s useMutation (this preceded that!)

If you switch to @apollo/hooks or whatever that package name is, then that fix will be relevant. Cheers!

from react-apollo-hooks.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.