I use useRef instead of useState. But my btn name not changing. Why ?
const data = useRef(null);
const handlePressCategory = (category: Categories) => {
data.current = category;
modalCategoriesRef.current?.close();
}
<Pressable style={[ButtonStyles.full_without, s.btn]} onPress={handleOpenModalCategories}>
<Text style={s.btnText}>{ data.current === null ? 'Kategorie auswählen' : data.current}</Text>
</Pressable>
I am very thankful for your help and answers. I dont know why its not displaying
CodePudding user response:
Changing data with useRef
doesn't trigger React to re-render your views. Think about it like some field in class that you can change without any reaction.
https://reactjs.org/docs/hooks-reference.html#useref
If you need re-render view when your ref
have changes, just use useState
. It's designed specially for it
Otherwise, if it's not possible, you can write some useForceRerender
hook that will invoke render of your component. Something like that:
export const useForceRerender = () => React.useReducer((x) => x 1, 0)[1];
const App = () => {
const data = useRef(null);
const forceRerender = useForceRerender();
const handlePressCategory = (category: Categories) => {
data.current = category;
modalCategoriesRef.current?.close();
forceRerender(); // <-- here
}
return (
<Pressable style={[ButtonStyles.full_without, s.btn]} onPress={handleOpenModalCategories}>
<Text style={s.btnText}>{ data.current === null ? 'Kategorie auswählen' : data.current}</Text>
</Pressable>
)
}