如何使用reactjs解析从孩子到父母的数据?

Posted

技术标签:

【中文标题】如何使用reactjs解析从孩子到父母的数据?【英文标题】:How to parse data from child to parent using reactjs? 【发布时间】:2017-08-31 23:18:12 【问题描述】:

您好,我目前正在研究 reactjs,但处于非常基础的水平。我试图解析从父母到孩子以及从孩子到父母的数据。父母对孩子工作正常,但孩子对父母我不能。

这是整个场景... 我有 3 个组件.. 应用程序、主页和用户。 从 App 组件到 Home 组件我想解析数据..它工作正常。 在 Home 组件中,我有一个 Input 字段。如果我写一些东西并单击按钮,那么输入值将解析为 App 组件。 App 是我的父母,Home 是孩子..

这里是代码... APP组件

    constructor() 
          super() 
          this.state = 
              userName : ' '
          ;
      
    changeUName(newName) 
        this.setState(
            userName: newName
        );
        console.log('user',newName);  // Getting Undefined
    

  render() 

    return (

      <div className="App">

        <Home changeUser = () => this.changeUName() />
      </div>
    );
  

子组件用户

constructor(props) 

        super();

        this.state = 

            userName: ''

        ;
    
    changeUName(event) 
        this.setState(
            userName: event.target.value
        );
    

    nameChange() 
        console.log(this.state.userName)         // If I write "Test" in input field. I will get the value here. 

        this.props.changeUser(this.state.userName); // Once I parse this value, I am getting undefined..
    

    render() 
        return(                              
            <div>
                <h1> HOME Page</h1>
                Name : <input type="text" value=this.state.userName onChange=(event) => this.changeUName(event) ref="uName"/><br/>
                <button onClick=() => this.nameChange()>Click</button>
            </div>
        )
    

我不知道哪里出错了。请指导我。提前谢谢..

【问题讨论】:

How to pass data from child component to its parent in ReactJS?的可能重复 谢谢@Shubham。我看过这个帖子。从昨天开始尝试了很多,但仍然显示未定义的值。 【参考方案1】:

问题是您没有将收到的道具绑定到函数定义。见下面sn -p

class Parent extends React.Component  
   constructor() 
          super() 
          this.state = 
              userName : ' '
          ;
      
    changeUName(newName)
        this.setState(
            userName: newName
        );
        console.log('user',newName);  // Getting Undefined
    

  render() 

    return (

      <div className="App">

        <Home changeUser = (value) => this.changeUName(value) />
      </div>
    );
  

class Home extends React.Component 
  constructor(props) 

        super();

        this.state = 

            userName: ''

        ;
    
    changeUName(event) 
        this.setState(
            userName: event.target.value
        );
    

    nameChange() 
        console.log(this.state.userName)         // If I write "Test" in input field. I will get the value here. 
        
        this.props.changeUser(this.state.userName); 
    

    render() 
        return(                              
            <div>
                <h1> HOME Page</h1>
                Name : <input type="text" value=this.state.userName onChange=(event) => this.changeUName(event) ref="uName"/><br/>
                <button onClick=() => this.nameChange()>Click</button>
            </div>
        )
    
    


ReactDOM.render(<Parent/>, document.getElementById('app'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="app"></div>

或者用箭头函数指定函数

 changeUName = (newName) =>
        this.setState(
            userName: newName
        );
        console.log('user',newName);  // Getting Undefined
    

然后这样称呼它

<Home changeUser = this.changeUName />

【讨论】:

谢谢.. 太好了。是的,我犯了这个愚蠢的错误。一次又一次。再一次感谢你。它现在工作正常..【参考方案2】:

罪魁祸首就是这行代码:

<Home changeUser = () => this.changeUName() />

你调用changeUName 没有任何参数。你应该改写:

<Home changeUser = name => this.changeUName(name) />

或者

<Home changeUser = this.changeUName />

顺便问一下,您是否考虑过将您的用户名存储到 redux 存储中?如果你还没有研究过,你绝对应该研究一下。 在这种情况下,您会将用户名存储在 redux 存储中,并通过将其注入到它们的 props 中将其传递给 App(和其他组件)。

【讨论】:

谢谢@Antoine。这是工作。但是告诉我一件事,如果我重复使用这些数据,那我该怎么办......?这意味着我想重用我的输入值以进行进一步的处理,例如解析另一个子组件或在页面上打印它,那么我应该怎么做...? @R.Dey 不客气 :) 关于您的第一个问题,您的意思是要在其他组件中显示用户名吗?在这种情况下,您会将 userName 作为组件的道具从 App 传递给目标子项。但是在这种情况下,我强烈建议您将 redux 与 connect 结合使用,这样您就不必实际转发 userName:您可以直接“连接”目标子组件。 感谢您的建议。是的,我已经看到了。但是我才刚刚开始学习。所以在我对 react 有明确的想法之前,我不能去 redux。 :)

以上是关于如何使用reactjs解析从孩子到父母的数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何在可扩展的listview android中将孩子添加到特定的父母

如何使用 PDO 从 PHP 中的单个 select 语句将孩子分配给父母?

从父母到孩子的传递数据

XPath:如何从一个孩子导航到同一个父母的另一个孩子

如何将两个孩子添加到数据库中的父母

React,如何从父母那里访问孩子的状态?无需更新父母的状态