I am creating a todo app in which a dialog is to be shown when button is clicked and when the button cancel is clicked it need to be dismissed. I have two components which are:
AddTodo.js
import { Modal, StyleSheet, Text, TouchableOpacity, View } from "react-native";
import { GetInfoDialog } from "./GetInfoDialog";
import { React, useState } from "react";
function useChange() {
const [state, setState] = useState(false);
function change(value) {
setState(value);
console.log("state: " + value);
}
return { state, change };
}
function AddTodo() {
const { state, change } = useChange();
return (
<View style={styles.container}>
<Modal
animationType="slide"
transparent={true}
visible={state}
style={styles.itemsContainer}
>
<GetInfoDialog />
</Modal>
<TouchableOpacity
style={styles.btn}
onPress={() => {
change(true);
// console.log("btn click: " + clicked);
}}
>
<Text style={styles.text}>Add New</Text>
</TouchableOpacity>
</View>
);
}
and GetDialogInfo.js
import react, { useState } from "react";
import { useChange } from "./AddTodo";
import {
StyleSheet,
Text,
TextInput,
TouchableOpacity,
View,
} from "react-native";
function GetInfoDialog() {
const { state, change } = useChange();
return (
<View style={styles.container}>
<Text style={styles.headerText}>Add Todo</Text>
<TextInput style={styles.input} />
<View style={styles.btnContainer}>
<TouchableOpacity style={styles.btn}>
<Text style={styles.text}>Add</Text>
</TouchableOpacity>
<TouchableOpacity
style={styles.btn}
onPress={() => {
change(false);
}}
>
<Text style={styles.text}>Cancel</Text>
</TouchableOpacity>
</View>
</View>
);
}
I am try to change the state using the change function but the state is not getting changed.
The useChange function you have written is working as a custom hook. It doesn't connect the two components. Can I know what is your requirement?
You are trying to share state
and change
in the different components: AddTodo
and GetInfoDialog
by const { state, change } = useChange();
But it's not possible in your app because you actullay created 2 state
s and change
s through your custom hook.
To share it, you need to define them once and pass them as props into GetInfoDialog
.
eg
GetInfoDialog({state, change}) {
// Remove the below line and get state and change from props.
// const { state, change } = useChange();
...
...
}
And pass state
and change
created in your AddTodo
.
<Modal
animationType="slide"
transparent={true}
visible={state}
style={styles.itemsContainer}
>
<GetInfoDialog state={state} chagne={change} />
</Modal>
const ParentComponent = () => {
const [someState, setSomeState] = useState()
return (
<>
<ComponentOne someState={someState} setSomeState={setSomeState}/>
<ComponentTwo someState={someState} setSomeState={setSomeState}/>
</>
)
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.