Как мне сделать thefun.thefun функцией?

#reactjs #typescript #react-native #react-props

#reactjs #машинопись #react-native #react-props

Вопрос:

Технология: React-Native

Желаемый результат: я пытаюсь передать функцию между компонентами. Я хочу theFun.theFun() вызвать, но он не запускается:

Исключение компонента theFun.theFun не является функцией. (В ‘theFun.theFun(«2», «1», » Синяя креветка»). ‘theFun.theFun’ не определено

Что я пробовал: я пробовал {storeMeaturement} vs {()=> storeMeasurement("2","1","blueShrimp"} vs { storeMeasurement(«2″,»1″,» blueShrimp»} в определении компонента и theFun={storeMeasurement} vs theFun={storeMeasurement("2","1","blueShrimp")} в теге. Я пробовал и другие вещи, но безрезультатно.

Вот код:

Где я использую тег

 <ModalPurpleCard theList={["10","91","thermometer"]}  theFun={storeMeasurement} ></ModalPurpleCard>
  

Где я определяю тег

 function ModalPurpleCard(theList:any, theFun:any ) {// , theFun:function

  let [visOpen, setVisOpen] = React.useState(true);
  let [stillLoad, setStillLoad] = React.useState(true);

  //let theFig = Math.round(Math.random() *10   90)
  let theFig = Number(theList.theList[0])   Number(theList.theList[1])
  console.log(theFig)

  if (visOpen){
    return(
      <TouchableOpacity onPress={()=> setVisOpen(false)}>
        <View style={{zIndex:3}}>
          <ModalSecCard  >
            <Text style={{color:"#fff"}}>{theList.theList[2]}</Text>
          </ModalSecCard>
        </View>
      </TouchableOpacity>
    )

  } else{
      if(stillLoad){
        return(
          <TouchableOpacity onPress={theFun.theFun("2","1","blueShrimp")}>
          <ActivityIndicator animating={true} color="#333366"/>
          </TouchableOpacity>
        )
      } else {return(
        <Text>{theFig}</Text>
  )}
    
  }
  
}
  

Заключение:
Для меня странно то, что theList это отлично работает и успешно передается между компонентами. Однако функция этого не делает.

Ответ №1:

Попробуйте это

 
function ModalPurpleCard(props) {// , theFun:function

  let [visOpen, setVisOpen] = React.useState(true);
  let [stillLoad, setStillLoad] = React.useState(true);

  //let theFig = Math.round(Math.random() *10   90)
  let theFig = Number(props.theList[0])   Number(props.theList[1])
  console.log(theFig)

  if (visOpen){
    return(
      <TouchableOpacity onPress={()=> setVisOpen(false)}>
        <View style={{zIndex:3}}>
          <ModalSecCard  >
            <Text style={{color:"#fff"}}>{props.theList[2]}</Text>
          </ModalSecCard>
        </View>
      </TouchableOpacity>
    )

  } else{
      if(stillLoad){
        return(
          <TouchableOpacity onPress={() => props.theFun("2","1","blueShrimp")}>
          <ActivityIndicator animating={true} color="#333366"/>
          </TouchableOpacity>
        )
      } else {return(
        <Text>{theFig}</Text>
  )}
    
  }
  
}
  

Комментарии:

1. Да, с function ModalPurpleCard(props:any){ ... }

Ответ №2:

Реквизиты передаются внутри props объекта, а не как отдельные параметры. Вам нужно уничтожить ваши реквизиты в определении ModalPurpleCard функции:

 function ModalPurpleCard({ theList:any, theFun:any }) {
/* ... */
}