Hello All,
I am no react wizard and would appreciate some help please. I have tried googling but the answers arent exactly what I need or bit cryptic to me.
Using the context api. I have one function that calculates a value and a functional component to display the value. The functional component uses the useContext hook to get access to state and functions.
Do i simple using react.memo inside where the calculate function is or do i useMemo hook in the component? not sure how context api works with this.
appState where I have my functions I export provider with values added as object
return (
<AppContext.Provider
value={{
output: state.output,
}}
>
{props.children}
</AppContext.Provider>
);
};
export default CalcState;
because the values are in an object does that mean i have to use useCallback?
Top comments (4)
useContext.React.useMemoandReact.memoare different.React.useMemois a hook which you can use inside a functional component.React.memois a higher-order component. You will wrap your component withReact.memo.The component which is wrapped by
React.memochecks if props are same and will return the previous rendered output if props didn't change.For example taking the same code,
The child component renders the first time using the passed
outputvalue. Next time, if it is asked to render, it checks ifoutputprop is same as before, and if it is same, it will not re-render and instead gives the previously memozied component.omg I love you. thank you so much. one question if ok.
I noticed in the example you did not pass the value as object, if i pass as object will it cause issue with useMemo? for example
`
I did pass the object.
memoizedValueis an object.is same as
So this will look like
const memoizedValue = { output }which is an object.It's better whatever object you pass in ContextProvider's value is memoized.
is not receiving memoized value. Because the object
{output: state.output}is not a memoized object. So even ifstate.outputis unchanged, the{output: state.output}will not be the same as the previous value if the component that usesMyContext.Provideris re-rendered.thank you very much this helps a lot