如何在ReactJS中从子组件设置父组件的状态

如何在ReactJS中从子组件设置父组件的状态

在ReactJS中,我们可以通过将值作为子组件的prop来设置子组件的状态。有时候,我们需要从子组件将状态设置到父组件中。

我们可以在父组件中创建一个状态处理函数,并将其作为子组件的prop传递。然后,我们可以使用子组件函数来设置父组件的状态。通过这种方式,我们可以从子组件管理父组件的状态。

从函数组件中的子组件设置父状态

在函数组件中,我们可以通过将状态处理函数作为子组件的prop来从子组件设置父状态。

无论我们将任何函数作为组件prop传递,我们都可以从子组件执行该函数,即使该函数在父组件中定义。

语法

用户可以采用以下语法来处理React函数组件中从子组件设置父组件的状态。

// in the parent component
<Child change = {handleState} />

// in the child component
<button onClick = {() => change()}> Change Value from child </button>

在以上的语法中,我们将handleState()函数作为子组件的一个prop进行了传递。在子组件中,我们调用change()函数,该函数执行父组件的handleState()函数。

示例

App.js 文件中,我们使用hooks创建了状态变量。同时,我们创建了handleState()变量,用于改变状态变量的值。

另外,我们导入了子组件并将handleState()函数作为子组件的一个prop进行了传递。

文件名:- App.js

import React, { useState } from "react";
import Child from "./Child";

export default function App() {
   let [state, setState] = useState("Initial");
   function handleState() {
      setState("state Changed from child component!");
   }
   return (
      <div className = "App">
         <h2>
            {" "}
            Handling the <i> parent state from child component </i> in ReactJS.{" "}
         </h2>
         <div> The input value is {state}. </div>
         <Child change = {handleState} />
      </div>
   );
}

文件名: Child.js

import React, { useState } from "react";

function Child({ change }) {
   return (
      <div>
         <button onClick = {() => change()}> Change Value from child </button>
      </div>
   );
}
export default Child;

输出

它将产生以下输出-

如何在ReactJS中从子组件设置父组件的状态

在上面的输出中,用户可以观察到点击按钮时它改变了父组件的状态。

示例

在第一个示例中,我们通过将函数作为子组件的 prop 传递来改变父组件的状态,但是我们为父组件的状态设置了硬编码的值。

在下面的示例中,我们还将从子组件传递值给父组件,并使用从子组件获取的新值更新父组件的状态。

文件名:App.js

import React, { useState } from "react";
import Child from "./Child";

export default function App() {
   let [state, setState] = useState("Initial");
   function handleState(newValue) {
      setState(newValue);
   }
   return (
      <div className = "App">
         <h2>
            {" "}
            Handling the <i> parent state from child component </i> in ReactJS.{" "}
         </h2>
         <div>
            The input value in child state accessing from parent state is {state}.
         </div>
         <br></br>
         {/* pass handleState function as a prop of child component */}
         <Child change = {handleState} />
      </div>
   );
}

文件名:Child.js

import React, { useState } from "react";

// accessing the change function from the prop.
function Child({ change }) {
   const [value, setNewValue] = useState("");
   function handleChange(event) {
      let value = event.target.value;
      setNewValue(value);
      change(value);
   }
   return (
      <div>
         <input
            placeholder = "Enter some texts."
            value = {value}
            onChange = {handleChange}
         />
      </div>
   );
}
export default Child;

输出

如何在ReactJS中从子组件设置父组件的状态

当您输入一些文字 –

如何在ReactJS中从子组件设置父组件的状态

在上面的输出中,用户可以观察到输入元素位于子组件内部。无论我们在输入字段中写什么,在父组件中都会反映出来。

在类组件中从子组件设置父组件状态

我们还可以将方法作为子组件的props传递给类组件,以便从子组件处理父组件的状态。

语法

用户可以按照以下语法从子组件处理父组件的状态,以在类组件中处理父组件的状态。

<Child changeState = {this.changeState} />
<button onClick = {this.changeState}> Change parent's state </button>

在上面的语法中,我们使用’this’关键字来访问函数并将其作为子组件的属性传递。用户可以看到我们如何从子组件中调用changeState()函数。

示例

在App.js文件中,我们在构造函数中定义了状态。此外,我们还定义了changeState()方法,用于设置状态值。changeState()方法接受更新的值作为参数,我们将其用于更新状态的值。

文件名:App.js

import React, { useState } from "react";
import Child from "./Child";

class App extends React.Component {
   constructor(props) {
      super(props);
      this.changeState.bind(this);
      this.state = { value: "Empty" };
   }
   changeState = (newValue) => {
      this.setState({ value: newValue });
   };
   render() {
      return (
         <div>
            <h2>
               {" "}
               Handling the <i> parent state from child component </i> in class components
            </h2>
            <h3> The value of state variable is {this.state.value}.</h3>
            <Child changeState = {this.changeState} />
         </div>
      );
   }
}
export default App;

在Child.js文件中,我们在按钮点击时执行handleChange()函数。handleChange()方法调用传递新值作为参数的prop的changeState()方法。

文件名:Child.js

import React from "react";
import { Component } from "react";

// accessing the change function from the prop.
class Child extends Component {
   constructor(props) {
      super(props);
      this.handleChange.bind(this);
   }

   handleChange = () => {
      this.props.changeState("This is value set up from child component!");
   };
   render() {
      return (
         <div>
            <h3> This is a child component! </h3>
            <button onClick = {this.handleChange}> Change parent's state </button>
         </div>
      );
   }
}
export default Child;

输出

如何在ReactJS中从子组件设置父组件的状态

在本教程中,我们学习了如何从子组件设置父组件的状态。实现这个目标的一般方式是将状态处理函数作为子组件的属性传递,并在子组件中通过将新的状态值作为参数传递来执行处理函数。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程