从子组件(Tab Navigator)更新父组件的状态

希拉

我是React和React Native的新手,我正在尝试构建一个烹饪食谱应用程序。我正在尝试从DishIngredients.js更新DishTabNavigator.js中的菜品状态,以便可以将数据从DishTabNavigator.js发送到Firebase,但是我不知道如何更新状态。我试图提升状态,但我做不到。现在被困了一天。任何帮助,将不胜感激

DishTabNavigator.js

const Tab = createMaterialTopTabNavigator();

export default function MyTabs({ navigation }) {
  const [dish, setDish] = useState([{ ingredients: [] }]);
  React.useLayoutEffect(() => {
    navigation.setOptions({
      headerRight: () => (
        <TouchableOpacity style={styles.iconright}>
          <Text>Send dish to Firebase</Text>
          <FontAwesome name="save" size={24} color="black" />
        </TouchableOpacity>
      ),
    });
  });
  return (
    <Tab.Navigator>
      <Tab.Screen
        name="Ingredient"
        component={DishIngredients}
        ingredients={dish}
      />
    </Tab.Navigator>
  );
}

DishIngredients.js

class DishIngredients extends Component {
  constructor(props) {
    super(props);
    this.state = {
      ingredients: [],
      textInput: [],
    };
//Add TextInput
  addTextInput = (index) => {
    let textInput = this.state.textInput;
    textInput.push(
      <TextInput
        style={styles.textInput}
        onChangeText={(text) => this.addValues(text, index)}
      />
    );
    this.setState({ textInput });
  };

//Function to add values into the states
  addValues = (text, index) => {
    let dataArray = this.state.ingredients;
    let checkBool = false;
    if (dataArray.length !== 0) {
      dataArray.forEach((element) => {
        if (element.index === index) {
          element.text = text;
          checkBool = true;
        }
      });
    }
    if (checkBool) {
      this.setState({
        ingredients: dataArray,
      });
    } else {
      dataArray.push({ text: text, index: index });
      this.setState({
        ingredients: dataArray,
      });
    }
  };

  //function to console the output
  getValues = () => {
    console.log("Data", this.state.ingredients);
    this.props.ingredients = this.state.ingredients;
    console.log(this.props.ingredients);
  };

  render() {
    return (
      <View>
        <View style={styles.icon}>
          <View style={{ margin: 10 }}>
            <TouchableOpacity>
              <Ionicons
                name="add"
                size={24}
                color="black"
                onPress={() => this.addTextInput(this.state.textInput.length)}
              />
            </TouchableOpacity>
          </View>
          <View style={{ margin: 10 }}>
            <Button title="Remove" onPress={() => this.removeTextInput()} />
          </View>
        </View>
        {this.state.textInput.map((value) => {
          return value;
        })}
        <Button title="Get Values" onPress={() => this.getValues()} />
      </View>
    );
  }
}

export default DishIngredients;
维奈·辛格(Vinay Singh)

无需在当前代码中进行太多更改,您就可以这样做

const addIngredient = (ingredient) => {
    // TODO: ingredient
  };

  return (
    <Tab.Navigator>
      <Tab.Screen name="Ingredient">
        {(props) => (
          <DishIngredients
            {...props}
            ingredients={dish}
            addIngredient={addIngredient}
          />
        )}
      </Tab.Screen>
    </Tab.Navigator>
  );

正如你看到有一个函数addIngredient(如你愿意,你可以重命名)将被引入propDishIngredients类似this.props.addIngredient(<Your Ingredient text>)

ReactContext在上面也是一个不错的解决方案,但是我认为,这将在每次上下文更改时强制您的应用重新渲染。这可能会影响您的表现。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从子组件(Tab Navigator)更新父组件的状态

来自分类Dev

使用UseState React Hook从子组件更新父组件状态

来自分类Dev

将状态从子组件更新到父组件

来自分类Dev

如何从子组件更改父组件的状态?

来自分类Dev

如何从子组件更改父组件的状态?

来自分类Dev

无法从子组件更新状态

来自分类Dev

ReactJS从子组件修改父状态

来自分类Dev

如何将状态从子组件传递到父组件?

来自分类Dev

父状态更新时更新子组件

来自分类Dev

父状态更新时更新子组件

来自分类Dev

如何从子组件更新父变量

来自分类Dev

(VueJS) 从子组件更新父数据

来自分类Dev

从子组件更新反应状态(对象数组)

来自分类Dev

将dom从子组件更新为父组件

来自分类Dev

在 Vue.js 中从子组件更新父组件

来自分类Dev

父组件状态更新时,子组件的道具不更新

来自分类Dev

当父组件的状态更新时,React 子组件不会更新

来自分类Dev

Redux子项未更新父组件状态

来自分类Dev

子组件更新时更改父状态

来自分类Dev

父状态更改后,组件不会更新

来自分类Dev

父状态不更新子组件

来自分类Dev

从子组件内部的父组件重用方法

来自分类Dev

如何从子组件更改父组件的变量

来自分类Dev

从子组件中调用父组件函数

来自分类Dev

单击父组件,从子组件获取数据

来自分类Dev

停止从子组件触发父组件涟漪

来自分类Dev

React:使用异步数据更新父组件的子组件状态

来自分类Dev

如何使用React中子组件的状态更新父组件?

来自分类Dev

如何使用React中子组件的状态更新父组件?