接:https://blog.csdn.net/u010132177/article/details/103346244
用上节建好的my-app项目:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| my-app/ README.md node_modules/ package.json .gitignore public/ favicon.ico index.html manifest.json src/ App.css App.js App.test.js index.css index.js logo.svg
|
一、绑定状态数据state
1.绑定状态数据state实例
在src目录下新建一个componets,用来放【自己建立的组件】、【引入react写法1】:
在components文件夹下,新建一个组件:【home.js】输入如下内容:
注:(2)建立state数据(3)绑定state数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| import React,{Component} from 'react'; class Homes extends Component{ constructor(){ super(); this.state={ name:"Alice", age:20, sex:"女", userinfo:{username:'sky'} } } render(){ return( <div> <h2>这里是Home.js组件</h2> <p>我的名字是:{this.state.name}</p> <p>我的年龄是:{this.state.age}</p> <p>我的性别是:{this.state.sex}</p> <p>我的用户名:{this.state.userinfo.username}</p> </div> ); } }; export default Homes;
|
创建组件注意事项:
- 组件名Home首字母必须大写,否则不报错,但内容也不会显示出来
- (1) 处为固定写法,最好写成:
1 2 3
| constructor(props){ super(props); }
|
- (2)处this.state={},注意后面是“=”号不是其它
- (3)处,return内部 html标签最外层只能有一个div,不能有多个,否则报错
- (3)处,的html标签必须有封闭符号 /,如
<br>
错误,必须写成<br />
2.然后把【APP.js根组件】
改成如下【引入react写法二】(A)(B)处:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| import React from 'react'; import logo from './logo.svg'; import './App.css';
import Homes from './components/Home';
class App extends React.Component {
render (){ return( <div className="App"> <h1>这里是app.js根组件</h1> <Homes /> </div> );} } export default App;
|
3.运行:回到my-app项目里在cmd运行代码,启动项目查看效果
运行效果:
3.再做个新闻组件练练手
- 在components目录下新建News.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| import React,{Component} from 'react';
class News extends Component{ constructor(){ super(); } render(){ return( <div> <ul> <li>新闻列表。。。</li> <li>新闻列表。。。</li> <li>新闻列表。。。</li> </ul> </div> ); } } export default News;
|
- 回到App.js里加载News组件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| import React, { Component } from 'react'; import logo from './logo.svg';
import Homes from './components/Home'; import News from './components/News';
class App extends Component { render (){
return( <div className="App"> <h1>这里是app.js根组件</h1> <Homes /> <News /> </div> );} } export default App;
|
刷新:http://localhost:3000/
显示如下:
1 2 3 4 5 6 7 8 9 10 11 12 13
| 这里是app.js根组件 这里是Home.js组件 我的名字是:Alice
我的年龄是:20
我的性别是:女
我的用户名:sky
新闻列表。。。 新闻列表。。。 新闻列表。。。
|
二、绑定属性
1. 绑定属性源码:
首先把Home.js里内容改成:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| import React,{Component} from 'react'; import '../index.css';
class Homes extends Component{ constructor(props){ super(props); this.state={ red:'red', hello:'hello', blue_40:{ color:'blue', fontSize:'40px' } } } render(){ return( <div> <h2 className={this.state.red}>这里是Home.js组件</h2> <p title={this.state.hello}>hello!</p> { } <label htmlFor='name'>姓名:</label><input id='name' /> {} <p style={{"color":"green"}}>此处行内样式写的</p> </div> {} <p style={this.state.blue_40}>这里是state定义样式</p> ); } }; export default Homes;
|
react绑定属性注意事项:
- class要换成 className
- for要换成 htmlFor
- style要加两个{}
<div style={ {"color":'red'} }>我是一个红的的 div 行内样式</div>
- 其他的属性和以前写法是一样的
- 到App.js里引入Home组件即可刷新显示结果:
三、引入图片方法
Home.js里:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| import React,{Component} from 'react'; import logo from '../logo.svg'; import '../index.css'
class Homes extends Component{ constructor(props){ super(props); this.state={ msg:'下面将是一个图片两个示例:', home_style:'home_style' } } render(){ return(
<div className={this.state.home_style}> <p>{this.state.msg}</p> {/*1.引入图片 首先要在顶部引入图片 impor .... 2.直接用require函数引入图片,不在顶部写引入方式 3.直接引入网络图片,图片宽度在index.css定义 */} <img src={logo} /> <img src={require('../logo.svg')} /> <img src="https://www.baidu.com/img/bd_logo1.png" /> </div> ); } }; export default Homes;
|
App.js里:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| import React, { Component } from 'react'; import logo from './logo.svg';
import Homes from './components/Home'; import News from './components/News';
class App extends Component { render (){ return( <div className="App"> <h1>这里是app.js根组件</h1> <Homes /> <News /> </div> );} } export default App;
|
index.css
1 2 3
| .home_style img{ width: 300px; }
|
结果:将展示3个图片
四、数组(列表)循环显示到标签用法
Home.js:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| import React,{Component} from 'react'; import logo from '../logo.svg'; import '../index.css'
class Homes extends Component{ constructor(props){ super(props); this.state={ msg:'下面将是一个列表示例:', list1:[<h2 key='1'>列表的h2_1</h2>,<h2 key='2'>列表的h2_2</h2>], //下面这个list将用.map()函数处理,实现循环 list2:['aaa','bbb','ccc','ddd','eee'] list3:[ {name:"list3_111"}, {name:"list3_222"}, {name:"list3_333"}, {name:"list3_444"} ] } } //render里用jsx render(){ //用map()函数处理list2列表 【key={key} 不加,会在console出警告】 let list_result=this.state.list2.map(function(value,key){ return <li key={key}>{value}</li> }); return( <div className={this.state.home_style}> <p>{this.state.msg}</p> { /* */ } {this.state.list1} {list_result} { //list3用直接在代码块内写js方式处理列表中的对象 this.state.list3.map(function(value,key){ return <li key={key}> {value.name} </li> }) } </div> ); } };
export default Homes;
|
App.js不变,略过……,刷新即可看到llist被逐个循环显示出来了:
列表使用注意点:
列表需要加key=xx,并且每个key不能一样,否则报下列的警告信息。