壹 、了解React传值的数据
一、 创建组件的方法
一 . 1 通过function声明的组件特点是:
1)function创建的组件是没有state属性,而state属性决定它是不是有生命周期。
2)function没有constructor构造函数,
3)function的渲染方法是直接调用。
4)function中不可以用箭头函数
一 . 2 通过class声明组件的特点:
1)class组件有state属性,所以class是有声明周期的。
2)class组件中有constructor构造函数。
3)class组件通过render方法进行渲染,类需要先实例化再去调用实例化对象上的render方法。
4)class组件中可以用箭头函数。
二 、 props属性和state属性
二 . 1 props属性及用法
二 . 1 . 1 proprs属性是组件之间用来传递参数的,但是props的数据是不可以修改的。并且function中没有构造器,所以只有porps属性传
递数据。
二 . 1 . 2 用法
{this.props.name}
(具体用法参 贰、React 中代码)
二 . 2 state属性以及用法
二 . 1 . 1 state属性,class声明的组件中有constructor构造函数,可以声明state属性,state属性是class私有的属性,所以值是可以修改的。
二 . 1 . 2 用法
{this.state.[name]}
修改
{this.setState({ name:值 })}
(具体用法参 贰、React 中代码)
贰 、React 传值
HTML页面
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <link rel="icon" href="%PUBLIC_URL%/favicon.ico" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="theme-color" content="#000000" /> <meta name="description" content="Web site created using create-react-app"/> <link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" /> <link rel="manifest" href="%PUBLIC_URL%/manifest.json" /> <title>React App</title> </head> <body> <noscript>You need to enable JavaScript to run this app.</noscript> <div id="root"></div> </body> </html>
一、父组件向子组件传值
一 . 1 先声明父组件,用来向Son组件传值。
//引入React组件 import React from 'react'; //引入React-dom组件 import ReactDOM from 'react-dom'; //引入子组件Son import Son from './Son'; //声明一个父组件名为Father class Father extends React.Component{ //类自带的构造函数constructor constructor(){ //继承React super(); //声明一个类函数专属的状态state this.state={ message:"hello,This is my son's data。。。" } } //渲染方法,类组件中必须有的渲染方法。 render(){ //渲染方法中必须有的return 返回值,并且返回值最外层必须是只有一个标签。 return ( //如果页面中不希望有无用的标签,可以用React中自带的<React.Fragment>标签 <React.Fragment> {/*实例化Son组件并向Son组件传递数据,渲染到页面*/} <Son mess={this.state.message} /> </React.Fragment> ); } } //获取目标元素,并渲染 ReactDOM.render(<Father />,document.querySelector("#root"))
一 . 2 声明一个Son组件,接受Father组件的数据,并向父组件返回渲染数据。
//引入React import React from 'react'; //声明一个子组件,名为Son class Son extends React.Component{ //声明render方法 render(){ //return返回 return( <React.Fragment> <h1>这是Son组件</h1> {/* 调用组件之间传参props 渲染数据到页面 */} {this.props.mess} </React.Fragment> ); } } //向外暴露自己 export default Son;
二、子组件向父组件传值
二 . 1 声明一个父组件,名为Father。
//引入React组件 import React from 'react'; //引入React-dom组件 import ReactDOM from 'react-dom'; //引入子组件Son import Son from './Son'; //声明一个父组件名为Father class Father extends React.Component{ //声明一个类中自带的构造函数 constructor(){ //继承react super(); //声明一个state状态 this.state={ message:"" } } //声明一个用来接收子组件数据的方法 getSonMess(msg){ this.setState({ message:msg }) } //渲染方法 render(){ return( <React.Fragment> <h1>这是Father组件</h1> {/* 实例化子组件 */} <Son mess={this.getSonMess.bind(this)} /> <hr /> {/* 输出从Son组件中获取的数据 */} <h1>这是从Son组件中获取的数据</h1> {this.state.message} </React.Fragment> ); } } //获取目标元素,并渲染 ReactDOM.render(<Father />,document.querySelector("#root"))
二 . 2 声明一个子组件Son,向父组件Father传数据
import React from 'react'; class Son extends React.Component{ //创建构造函数 constructor(){ super(); //创建数据 this.state={ message:"这是在Son子组件生成的数据。。" } } //创建一个方法用来向父组件传数据 addFatherMess(){ this.props.mess(this.state.message) } render(){ retrun( <React.Fragment>
<h1>这是Son组件</h1> {/* 绑定一个点击事件,向父组件传数据 */} <button onClick={this.addFatherMess.bind(this)}>点击获取数据</button> </React.Fragment> ); } } //向外暴露 export default Son;
三、 兄弟相传
三 . 1 声明一个Father组件,用来接收Son组件的数据,然后发送到Son2组件,并向页面进行渲染
//引入react import React from 'react'; //引入react-dom组件 import ReactDOM from 'react-dom'; //引入 Son 组件 import Son from './Son'; //引入 Son2 组件 import Son2 from './Son2'; //创建一个Father组件 class Father extends React.Component{ //创建构造函数 constructor(){ //继承React super(); //创建state状态 this.state={ message:"" } } //通过getSonMess方法获取子组件参数,并修改this.state.message数据 getSonMess(msg){ this.setState({ message:msg }) } //声明render方法 render(){ //render方法中必须有一个返回值,是渲染页面的排版, return ( <React.Fragment> <h1>这是Father.js</h1> <hr /> {/* 实例化Son组件,从Son组件获取数据和渲染页面 */} <Son mess={this.getSonMess.bind(this)}></Son> <hr /> {/* 实例化Son2组件,向Son2组件传递数据和渲染页面 */} <Son2 data={this.state.message}></Son2> </React.Fragment> ); } } //获取目标元素,并渲染页面 ReactDOM.render(<Father />,document.querySelector(#root)) //
三 . 2 声明一个Son组件,用来生成数据,然后把数据传递给父组件
//引入react组件 import React from 'react'; //声明一个Son组件,用来向父组件传值 class Son extends React.Component{ //点击事件绑定的函数 sonClick(){ //生成数据,并赋值给参数 this.props.mess("Son里生成的数据") } render(){ return ( <div> <h1>这是Son.js</h1> {/* 通过点击事件绑定,把数据传给父组件 */} <button onClick={this.sonClick.bind(this)}>Son里的按钮点击获取数据传到Son2.js</button> </div> ); } } //向外暴露自己 export default Son;
三 . 3 创建一个Son2组件,用来接收Father组件传过来,Son组件给Father组件的数据 .
//引入react import React from 'react'; //声明一个Son2组件用来接收Father组件接收Son组件的数据 class Son2 extends React.Component{ render(){ return ( <div> {/* 获取数据并渲染通过props */} <h1>这是Son2.js</h1> 拿到{this.props.data} </div> ); } } //向外暴露自己 export default Son2;
注:以上为个人理解,如若有误,请留言指出。谢谢!