react组件传值(子传父)

本文介绍了一个React应用中如何实现父子组件之间的数据通信。具体来说,父组件通过传递一个更新自身状态的方法给子组件,子组件则通过调用该方法来更新父组件的状态,从而实现了从子到父的数据传递。

<div id="out"></div>

<script type="text/babel">
// 子传父   父组件获取子组件数据
//父组件传递一个可以改变自己状态的方法给子组件,子组件通过调用父组件传过来的方法来改变父组件的数据。
var Father = React.createClass({
        getInitialState:function(){
            return{
                res:""
            }
        },
        setVal:function(val){ //1.父组件定义一个改变自己状态的方法(setVal),获取子组件传递值之后重新赋值
        this.setState({
        res:val
        })
        },
        render:function(){//2.通过属性(value)传给子组件
            return(
                <div>
                    <h1>父组件</h1>
                    父组件获取子组件值-->{this.state.res}
                    <hr/>
                    <Child value={this.setVal}/>    
                  
                </div>
            )
        }
    });


    var Child = React.createClass({
        childChange:function(){   //3.子组件定义改变数据的方法,
            var str = this.refs.inputVal.value; 
            this.props.value(str); //4.把改变的数据传递给父组件,
        },
        render:function(){
            return(
                <div>
                    <h1>子组件</h1>
                    <input type = "text" ref = "inputVal" onChange = {this.childChange} />
                </div>
            )
        }
    });
    ReactDOM.render(<Father/>,document.getElementById("out"));
</script>

 

React 中,组件向子组件和子组件组件是常见的组件间通信需求,以下是具体实现方法: ### 组件向子组件 组件向子组件是通过 `props` 实现的。组件可以在渲染子组件时,将数据作为属性递给子组件,子组件通过 `props` 对象接收这些数据。 示例代码如下: ```jsx // 子组件 function ChildComponent(props) { return ( <div> <p>从组件接收到的: {props.message}</p> </div> ); } // 组件 function ParentComponent() { const message = "Hello from parent!"; return ( <div> <h1>Parent Component</h1> <ChildComponent message={message} /> </div> ); } export default ParentComponent; ``` ### 子组件组件组件组件通常使用回调函数的方式,具体步骤为:组件提供一个回调函数(其参数用于接受数据),将函数作为属性的,利用 `props` 递给子组件,子组件通过 `props` 获取到组件递过来的函数并调用,将子组件中想要递给组件的数据,作为参数递给这个函数 [^3]。 示例代码如下: ```jsx // 子组件 import React, { useState } from 'react'; function Son({ onValueChange }) { const [inputValue, setInputValue] = useState(''); const handleChange = (e) => { const newValue = e.target.value; setInputValue(newValue); onValueChange(newValue); }; return ( <div> <h3>Child Component</h3> <input type="text" value={inputValue} onChange={handleChange} /> </div> ); } // 组件 import React, { useState } from 'react'; import Son from './Son'; function Parent() { const [receivedValue, setReceivedValue] = useState(''); const handleValueChange = (newValue) => { setReceivedValue(newValue); }; return ( <div> <h1>Parent Component</h1> <p>从子组件接收到的: {receivedValue}</p> <Son onValueChange={handleValueChange} /> </div> ); } export default Parent; ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值