【问题标题】:Passing state from child component to the App component to be renders , in React Native在 React Native 中将状态从子组件传递到要渲染的 App 组件
【发布时间】:2021-05-14 04:32:09
【问题描述】:

我正在尝试将已存储在子组件的 useState 挂钩中的状态传递给父组件,即 app.js 我创建了 onPress 事件以将状态传递给我从应用程序传递的道具, js,当我按下这个功能时根本不起作用,这是代码

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

export function Focus({ addSubject }) {
  const [title, setTitle] = useState(null);

  return (
    <View style={styles.container}>
      <View style={styles.titleContainer}>
        <Text style={styles.title}>what do you want to fucos on ? </Text>
        <View style={styles.inputComtainer}>
          <TextInput
            style={styles.input}
            onSubmitEditing={({ nativeEvent }) => {
              setTitle(nativeEvent.text);
            }}
          />
          <RoundedButton
            title="+"
            size={60}
            onPress={() => {
              addSubject(title);
            }}
          />
        </View>
      </View>
    </View>
  );
}

这是 app.js 代码

import React, { useState } from 'react';
import { Text, View, StyleSheet } from 'react-native';
import Constants from 'expo-constants';
import { TextInput } from 'react-native-paper';
import { RoundedButton } from './src/components/RoundedButton';
import { Focus } from './src/features/Focus';

export default function App() {
  const [focusSubject, setfocusSubject] = useState(null);

  function reciveTitle(sendTitle) {
    setfocusSubject(sendTitle);
  }

  return (
    <View style={styles.container}>
      {focusSubject ? (
        <Text> {focusSubject}</Text>
      ) : (
        <Focus addSubject={setfocusSubject} />
      )}
    </View>
  );
}

【问题讨论】:

    标签: javascript reactjs react-native react-props use-state


    【解决方案1】:

    不是传递函数(reciveTitle),而是传递状态函数(setfocusSubject

    export default function App() {
      const [focusSubject, setfocusSubject] = useState(null);
    
      function reciveTitle(sendTitle) {
        setfocusSubject(sendTitle);
      }
    
      return (
        <View style={styles.container}>
          {focusSubject ? (
            <Text> {focusSubject}</Text>
          ) : (
            <Focus addSubject={reciveTitle} />  // pass reciveTitle function 
          )}
        </View>
      );
    }
    

    【讨论】:

      【解决方案2】:

      嘿,所以我认为这是一个小问题,当您使用{} 时,它默认返回undefined,而addSubject(title) 无论如何都会运行。为了能够看到你的函数被调用,你必须这样返回它:

      import React, { useState } from 'react';
      import { Text, View, StyleSheet } from 'react-native';
      import Constants from 'expo-constants';
      import { TextInput } from 'react-native-paper';
      import { RoundedButton } from '../../src/components/RoundedButton';
      
      export function Focus({ addSubject }) {
        const [title, setTitle] = useState(null);
      
        return (
          <View style={styles.container}>
            <View style={styles.titleContainer}>
              <Text style={styles.title}>what do you want to fucos on ? </Text>
              <View style={styles.inputComtainer}>
                <TextInput
                  style={styles.input}
                  onSubmitEditing={({ nativeEvent }) => {
                    setTitle(nativeEvent.text);
                  }}
                />
                <RoundedButton
                  title="+"
                  size={60}
                  onPress={() => {
                    return addSubject(title);
                  }}
                />
              </View>
            </View>
          </View>
        );
      }
      

      或者您可以使用像 onPress={() =&gt; addSubject(title)} 这样的显式返回,这样您就可以在父组件中获取返回的值。

      【讨论】:

        猜你喜欢
        • 2017-12-06
        • 1970-01-01
        • 2022-07-15
        • 2021-09-20
        • 1970-01-01
        • 2019-02-26
        • 1970-01-01
        • 2019-01-20
        • 2022-01-18
        相关资源
        最近更新 更多