Изменить useState из удаленного компонента

Я знаю, что с помощью следующего кода ниже изменение useState в событии onPress другого компонента было бы невозможно, но как мне это сделать? Я хочу сделать так, чтобы при выполнении функции onPress внутри Card.jspopUpData изнутри 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>
)

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
102
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Просто передайте ссылку на функцию 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>
)
}

Другие вопросы по теме