Я знаю, что с помощью следующего кода ниже изменение useState в событии onPress другого компонента было бы невозможно, но как мне это сделать? Я хочу сделать так, чтобы при выполнении функции onPress внутри Card.js popUpData изнутри App.js менялась.
App.js
const [popUpData, setPopUpData] = React.useState("Nothing")
return (
<Card>
<Text style = {styles.pokemonName}>{item.name}</Text>
</Card>
<Text>{popUpData}</Text>
)
Card.js
const doSomething = () => {
setPopUpData("Something")
//other things...
}
return (
<TouchableOpacity activeOpacity = {1} style = {styles.card} onPress = {doSomething()}>
<View style = {styles.cardContent}>
{ props.children }
</View>
</TouchableOpacity>
)
Просто передайте ссылку на функцию setState дочернему компоненту. (в простейшем случае)
const Parent = () => {
const [popUpData, setPopUpData] = React.useState("Nothing")
return (
<Card setPopUpDataHandler = {setPopUpData}>
<Text style = {styles.pokemonName}>{item.name}</Text>
</Card>
<Text>{popUpData}</Text>
)
}
const Card = ({setPopUpDataHandler, children}) => {
const doSomething = () => {
setPopUpDataHandler("Something")
//other things...
}
return (
<TouchableOpacity activeOpacity = {1} style = {styles.card} onPress = {doSomething()}>
<View style = {styles.cardContent}>
{ children }
</View>
</TouchableOpacity>
)
}
App.js
const [popUpData, setPopUpData] = React.useState("Nothing")
return (
<Card onUpdate = {(d)=>setPopUpData(d) }>
<Text style = {styles.pokemonName}>{item.name}</Text>
</Card>
<Text>{popUpData}</Text>
)
Card.js
function Card(props){
const doSomething = () => {
props.onUpdate("Something")
}
return (
<TouchableOpacity activeOpacity = {1} style = {styles.card} onPress = {doSomething()}>
<View style = {styles.cardContent}>
{ props.children }
</View>
</TouchableOpacity>
)
}