react入门之——-组件传值
react的组件传值方式有父传子,子传父,非父子
首先是组件传值有两种方法
1、函数式组件传值
2、类组件传值
一、父传子–简化版
1、函数式组件传值
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Hello World</title>
<!--react的核心库-->
<script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
<!--react的与dom相关的一些功能-->
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<!--将浏览器不支持的jsx语法转化为js语法-->
<script crossorigin src="https://unpkg.com/[email protected]/babel.min.js"></script>
</head>
<body>
<div id="root" class="parent">
</div>
</body>
</html>
<script type="text/babel">
// 创建一个函数组件 ---- 使用props完成值得接收
function Child(props){
return (
<div>
<ul>
<li>{props.name}</li>
<li>2</li>
<li>3</li>
</ul>
</div>
)
}
ReactDOM.render(
// 渲染组件 并通过name属性完成传值
<Child name="3"></Child>,
document.getElementById('root')
);
</script>
2、类组件传值
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Hello World</title>
<!--react的核心库-->
<script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
<!--react的与dom相关的一些功能-->
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<!--将浏览器不支持的jsx语法转化为js语法-->
<script crossorigin src="https://unpkg.com/[email protected]/babel.min.js"></script>
</head>
<body>
<div id="root"></div>
</body>
</html>
<script type="text/babel">
// 创建一个类组件
class Child extends React.Component{
render(){
return (
<div>
<ul>
<li>{this.props.name}</li>
<li>2</li>
<li>3</li>
</ul>
</div>
)
}
}
ReactDOM.render(
<Child name="1"></Child>,
document.getElementById('root')
);
</script>
详解
我们调用了 ReactDOM.render() 方法并向其中传入了 <Child name="1" /> 元素。
React 调用 Child 组件,并向其中传入了 {name: '1'} 作为 props 对象。
Child 组件返回 <li>1</li>。
React DOM 迅速更新 DOM ,使其显示为 <li>1</li>。
父传子—-完整版
1、函数式组件传值
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Hello World</title>
<!--react的核心库-->
<script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
<!--react的与dom相关的一些功能-->
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<!--将浏览器不支持的jsx语法转化为js语法-->
<script crossorigin src="https://unpkg.com/[email protected]/babel.min.js"></script>
</head>
<body>
<div id="root"></div>
</body>
</html>
<!--
组件:组成的部件,可以接受任何props输入,并返回元素
-->
<script type="text/babel">
// 创建一个父组件
function Parent(){
return (
<div>
<h1>这是父组件</h1>
{/*在父组件中嵌套子组件*/}
<Child name="1"></Child>
</div>
)
}
// 创建一个子组件 列表
function Child(props){
return (
<div>
<h3>这是子组件</h3>
<ul>
<li>{props.name}</li>
<li>2</li>
<li>3</li>
</ul>
</div>
)
}
// 2. 组件的使用
ReactDOM.render(
<Parent></Parent>,
document.getElementById('root')
);
</script>
2、类组件传值
!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Hello World</title>
<!--react的核心库-->
<script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
<!--react的与dom相关的一些功能-->
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<!--将浏览器不支持的jsx语法转化为js语法-->
<script crossorigin src="https://unpkg.com/[email protected]/babel.min.js"></script>
</head>
<body>
<div id="root"></div>
</body>
</html>
<script type="text/babel">
// 创建一个类组件 -- 父
class Parent extends React.Component{
render(){
return (
<div>
<h1>这是父组件</h1>
{/*在父组件中嵌套子组件*/}
<Child name="1"></Child>
</div>
)
}
}
// 创建一个类组件 -- 子
class Child extends React.Component{
render(){
return (
<div>
<h3>这是子组件</h3>
<ul>
<li>{this.props.name}</li>
<li>2</li>
<li>3</li>
</ul>
</div>
)
}
}
ReactDOM.render(
<Parent></Parent>,
document.getElementById('root')
);
</script>
子传父
1、函数式
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Hello World</title>
<!--react的核心库-->
<script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
<!--react的与dom相关的一些功能-->
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<!--将浏览器不支持的jsx语法转化为js语法-->
<script crossorigin src="https://unpkg.com/[email protected]/babel.min.js"></script>
</head>
<body>
<div id="root"></div>
</body>
</html>
<script type="text/babel">
//子组件
function Child(props){
return (
<div>
{/*当文本框内容发生变化的时候.会执行父组件里面的事件*/}
子组件:<input onChange={props.handleEmail}/>
</div>
)
}
//父组件
function Parent() {
return (
<div>
<div id='div'>父组件:{1}</div>
<Child name="email" handleEmail={
function (event){
/*获取子组件的数据*/
console.log(event.target.value)
document.getElementById('div') = event.target.value
}
}/>
</div>
)
}
ReactDOM.render(
<Parent />,
document.getElementById('root')
);
</script>
2、类方法
扫描二维码关注公众号,回复:
2433205 查看本文章
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Hello World</title>
<!--react的核心库-->
<script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
<!--react的与dom相关的一些功能-->
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<!--将浏览器不支持的jsx语法转化为js语法-->
<script crossorigin src="https://unpkg.com/[email protected]/babel.min.js"></script>
</head>
<body>
<div id="root"></div>
</body>
</html>
<script type="text/babel">
//子组件
class Child extends React.Component{
render(){
return (
<div>
{/*当文本框内容发生变化的时候.会执行父组件里面的事件*/}
子组件:<input onChange={this.props.handleEmail}/>
</div>
)
}
}
//父组件
class Parent extends React.Component{
constructor(props){
super(props)
this.state = {
email:''
}
}
handleEmail(event){
this.setState({email: event.target.value});
}
render(){
return (
<div>
<div>父组件:{this.state.email}</div>
<Child name="email" handleEmail={this.handleEmail.bind(this)}/>
</div>
)
}
}
ReactDOM.render(
<Parent />,
document.getElementById('root')
);
</script>
非父子,及兄弟元素传值
使用中间人模式 , 定义一个公共的父组件来实现兄弟组件之间的数据传递
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Hello World</title>
<!--react的核心库-->
<script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
<!--react的与dom相关的一些功能-->
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<!--将浏览器不支持的jsx语法转化为js语法-->
<script crossorigin src="https://unpkg.com/[email protected]/babel.min.js"></script>
</head>
<body>
<div id="root"></div>
</body>
</html>
<script type="text/babel">
class Brother1 extends React.Component{
constructor(props){
super(props);
this.state = {}
}
render(){
return (
<div>
<button onClick={this.props.refresh}>
更新兄弟组件
</button>
</div>
)
}
}
class Brother2 extends React.Component{
constructor(props){
super(props);
this.state = {}
}
render(){
return (
<div>
{this.props.text || "兄弟组件未更新"}
</div>
)
}
}
class Parent extends React.Component{
constructor(props){
super(props);
this.state = {}
}
refresh(){
return (e)=>{
this.setState({
text: "兄弟组件沟通成功",
})
}
}
render(){
return (
<div>
<h2>兄弟组件沟通</h2>
<Brother1 refresh={this.refresh()}/>
<Brother2 text={this.state.text}/>
</div>
)
}
}
ReactDOM.render(<Parent />, document.getElementById('root'));
</script>
使用jQuery自定事件机制进行非父子传值
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Hello World</title>
<script src="https://code.jquery.com/jquery.js"></script>
<!--react的核心库-->
<script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
<!--react的与dom相关的一些功能-->
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<!--将浏览器不支持的jsx语法转化为js语法-->
<script crossorigin src="https://unpkg.com/[email protected]/babel.min.js"></script>
</head>
<body>
<div id="root"></div>
</body>
</html>
<script type="text/babel">
class Com1 extends React.Component{
constructor(props){
super(props);
this.state = {}
}
render(){
return (
<div>
<ul>
<li>1</li>
</ul>
</div>
)
}
componentDidMount(){
$('#root').on('bus',function(e,a,b){
console.log(a,b)
})
}
}
class Com2 extends React.Component{
constructor(props){
super(props);
this.state = {}
}
render(){
return (
<div>
<ul>
<li>1</li>
</ul>
</div>
)
}
componentDidMount(){
$('#root').trigger('bus',[11,22])
}
}
ReactDOM.render(
<div>
<Com1></Com1>
<Com2></Com2>
</div>,
document.getElementById('root'));
</script>
等等。。。。。。。。