onPress() не работает на expo v42.0.0. Использование осязаемой области для округленной кнопки

#android #ios #react-native #expo #mobile-application

Вопрос:

Я использовал крючок useState. onSubmitEditing, т. е. нажатие клавиши enter, должна выполняться команда setTmpItem, которая должна установить значение InputBox в переменной tmpItem. Переданный реквизит addSubject также является крючком, который можно увидеть во 2-м коде(app.js)

Но когда я нажимаю кнопку округления, она не регистрирует консоль ни 1, ни 2, а также addSubject(tmpItem) не работает.

Focus.js ниже

 import React, { useState } from 'react';
import { View, StyleSheet, Text } from 'react-native';
import { TextInput } from 'react-native-paper';
import { RoundedButton } from '../../components/RoundedButton';

export const Focus = ({ addSubject }) => {
  const [tmpItem, setTmpItem] = useState(null);
  return (
    <View style={styles.container}>
      <View>
        <Text> What would you like to focus on? </Text>
        <View>
          <TextInput
            onSubmitEditing={({ nativeEvent: { text } }) => {
              setTmpItem(text);
            }}
          />
          <RoundedButton
            size={50}
            title=" "
            onPress={() => {
              console.log("1");
              addSubject(tmpItem);
              console.log("2");
            }}
          />
        </View>
      </View>
    </View>
  );
};


 

App.js ниже

 //App.js is the central point to glue everything
import React, { useState } from 'react';
import { View, StyleSheet, Text } from 'react-native';
import { Focus } from './src/features/focus/Focus';

export default function App() {
  const [focusSubject, setFocusSubject] = useState(null);
  return (
    <View>
      {focusSubject ? (
        <Text>Where am I going to build a timer</Text>
      ) : (
        <Focus addSubject = {setFocusSubject}/>
      )}
      <Text>{focusSubject}</Text>
    </View>
  );
}


 

RoundedButton.js ниже

 import React from 'react';
import { TouchableOpacity, View, Text, StyleSheet } from 'react-native';

export const RoundedButton = ({
  style = {},
  textStyle = {},
  size = 125,
  ...props
}) => {
  return (
      <TouchableOpacity>
        <Text>{props.title}</Text>
      </TouchableOpacity>
  );
};

 

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

1. Я использую expo v42.0.0

Ответ №1:

Вам нужно обработать свой TextInput Focus.js запрос, передав value и onChangeText реквизит в TextInput компоненте, например:

 export const Focus = ({ addSubject }) => {
  const [tmpItem, setTmpItem] = useState(null);

  const onSubmit = () => {
     //and handle this onSubmit function the way you want to
     //or pass the addSubject props
     addSubject(tmpItem);
  }

  return (
    <View style={styles.container}>
      <View>
        <Text> What would you like to focus on? </Text>
        <View>
          <TextInput
            onChangeText={setTmpItem}
            value={tmpItem}
            onSubmitEditing={() => onSubmit()}
          />
          <RoundedButton
            size={50}
            title=" "
            onPress={() => {
              addSubject(tmpItem);
            }}
          />
        </View>
      </View>
    </View>
  );
};
 

Кроме того, причина, по которой вы не работаете в том, что вы не передаете эту информацию своему сотруднику . console.log RoundedButton onPress TouchableOpacity RoundedButton В RoundedButton.js сделай это вот так:

 import React from 'react';
import { TouchableOpacity, View, Text, StyleSheet } from 'react-native';

export const RoundedButton = ({
  style = {},
  textStyle = {},
  size = 125,
  ...props
}) => {
  return (
      <TouchableOpacity onPress={props.onPress}>
        <Text>{props.title}</Text>
      </TouchableOpacity>
  );
};
 

props.onPress вот чего тебе не хватает.
Надеюсь, это сработает для вас.

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

1. Я не пытаюсь отправить сообщение при нажатии enter. Я пытаюсь сохранить значение, введенное в <TextInput>, в переменной tmpItem, а затем, когда я нажимаю закругленную кнопку, addSubject работает.

2. Я сделал console.log(tmpItem) и обнаружил, что при нажатии кнопки округления значения не регистрируются. Я использовал console.log() выше и ниже addSubject(tmpItem) в onPress().

3. onPress={() => { console.log(tmpItem); addSubject(tmpItem); console.log(tmpItem); }}