接:https://www.cnblogs.com/chenxi188/p/11702799.html

用上节建好的my-app项目:

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.在src目录下新建一个componets,用来放【自己建立的组件】、【引入react写法1】:

在components文件夹下,新建一个组件:【home.js】输入如下内容:注:(2)建立state数据(3)绑定state数据

import React,{Component} from 'react';  //(0)【引入组件第一种写法】

class Homes extends Component{         //(0-1)对应第一种引入react引入方法类写法
//(1)接下来两行为固定写法
constructor(){
super(); //(2)以下几行为建立一个组件状态数据
this.state={
name:"Alice",
age:20,
sex:"女",
userinfo:{username:'sky'}
}
} render(){ //(3)下面的this.state.xxx为把状态数据绑定到前端
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;

创建组件注意事项:

0.  组件名Home首字母必须大写,否则不报错,但内容也不会显示出来

  1. (1)处为固定写法,最好写成:

    constructor(props){ //用父子组件传值props
    super(props);
    }

  2. (2)处this.state={},注意后面是“=”号不是其它
  3. (3)处,return内部 html标签最外层只能有一个div,不能有多个,否则报错
  4. (3)处,的html标签必须有封闭符号 /,如<br>错误,必须写成<br />

2.然后把【APP.js根组件】改成如下【引入react写法二】(A)(B):

import React from 'react'; //(A)引入react写法二
import logo from './logo.svg';
import './App.css'; //从components文件夹下引入写好的Home.js组件,.js可省略
import Homes from './components/Home'; class App extends React.Component { //(B)对应引入写法二类写法
//以下的<Homes />为把home时写好的组件引用过来
render (){
return(
<div className="App">
<h1>这里是app.js根组件</h1> <Homes />
</div>
);}
} export default App;

3.运行:回到my-app项目里在cmd运行代码,启动项目查看效果

npm start

运行效果:

3.再做个新闻组件练练手

1.在components目录下新建News.js

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;

2.回到App.js里加载News组件:

import React, { Component } from 'react';
import logo from './logo.svg';
//import './App.css'; //把css样式注释掉,解除所有文本居中问题 //从components文件夹下引入Home.js
import Homes from './components/Home';
import News from './components/News'; //引入News组件 class App extends Component { render (){
//用<News/>把组件显到前端
return(
<div className="App">
<h1>这里是app.js根组件</h1> <Homes />
<News />
</div>
);}
} export default App;

刷新:http://localhost:3000/

显示如下:

这里是app.js根组件

这里是Home.js组件

我的名字是:Alice

我的年龄是:20

我的性别是:女

我的用户名:sky

  • 新闻列表。。。
  • 新闻列表。。。
  • 新闻列表。。。

二、绑定属性

1.首先把Home.js里内容改成:

import React,{Component} from 'react';

import '../index.css'; //【1】引入css--在index.css里写一个样式

class Homes extends Component{
//下3行固定写法
constructor(props){
super(props);
this.state={ //【2】red名源自index.css里的.red样式定义
red:'red',
hello:'hello',

//【5】直接在state内部写style样式
          blue_40:{
          color:'blue',
          fontSize:'40px'
             }

        }
}
render(){
//【3】className=class因为css的class和js的class冲突,所以css里class=className、另外还有一个for=htmlFor
//h2之后的{this.state.xxx}为绑定属性,此处是绑定一个样式
//p里绑定的title,鼠标移上去将显示hello
return(
<div>
<h2 className={this.state.red}>这里是Home.js组件</h2>
<p title={this.state.hello}>hello!</p>

{
                   //此处htmlFor作用:点姓名会选中后面的输入框
                    }
                 <label htmlFor='name'>姓名:</label><input id='name' />

{
           //行内样式写法
           }
            <p style={{"color":"green"}}>此处行内样式写的</p>

            </div>

{
        //【5】引入在state里定义的样式
      }
          <p style={this.state.blue_40}>这里是state定义样式</p>

    );
}
}; export default Homes;

react绑定属性注意:

  1. class要换成className
  2. 2. for要换成 htmlFor
  3. style:<div style={{"color":'red'}}>我是一个红的的 div 行内样式</div>
  4. 其他的属性和以前写法是一样的

2.到App.js里引入Home组件即可刷新显示结果:


2. 引入图片方法

Home.js里:

import React,{Component} from 'react';
import logo from '../logo.svg'; //方法1引入图片前准备,后面将用src={logo}引入
import '../index.css' class Homes extends Component{
//下3行固定写法
constructor(props){
super(props);
this.state={
msg:'下面将是一个图片两个示例:',
home_style:'home_style' }
}
//render里用jsx
render(){
//div的className也可直接写类名className='home_style',就不用在state里定义数据了
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里:

import React, { Component } from 'react';
import logo from './logo.svg';
//import './App.css';
//从components文件夹下引入Home.js
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

.home_style img{
width: 300px; }

结果:将展示3个图片


3.数组(列表)用法

Home.js:

import React,{Component} from 'react';
import logo from '../logo.svg'; //引入图片
import '../index.css' class Homes extends Component{
//下3行固定写法
constructor(props){
super(props);
this.state={
msg:'下面将是一个列表示例:',
//【注意】如果是html列表,不能加引号,否则将以文本处理 【注意key必须要加个不一样的值,否则控制台有警告信息】
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>
{ /*
//列表1将直接引用state,会自动循环内部内容
//此处不用this.state,因为它不在construct构造函数内
*/ }
{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被逐个循环显示出来了:

列表使用注意点:

  1. 列表需要加key=xx,并且每个key不能一样,否则报下列的警告信息。

四、React创建组件、 JSX使用、绑定数据、引用图片方式、数组(列表)循环输出的更多相关文章

  1. react创建组件的几种方式及其区别

    react创建组件有如下几种方式 ①.函数式定义的无状态组件 ②.es5原生方式React.createClass定义的组件   ③.es6形式的extends React.Component定义的组 ...

  2. react 创建组件 (四)Stateless Functional Component

    上面我们提到的创建组件的方式,都是用来创建包含状态和用户交互的复杂组件,当组件本身只是用来展示,所有数据都是通过props传入的时候,我们便可以使用Stateless Functional Compo ...

  3. React创建组件的方法,组件的props属性、state属性的用法和特点,父子组件传值,兄弟组件传值

    创建组件的方法,组件的props属性.state属性的用法和特点,父子组件传值,兄弟组件传值 1.react组件 1.1.创建组件的方法 1.1.1.函数组件 定义一个组件最简单的方式是使用JavaS ...

  4. React 学习(一) ---- React Element /组件/JSX

    学习React的时候,你可能听到最多的就是要先学习webpack, babel,要先学会配置然后才能学react 等等,一堆的配置就把我们吓着了,根本就没有心情就学习react了.其实在最开始学习re ...

  5. React创建组件的不同方式(ES5 & ES6)

    一. 首先缕清楚React.createElement.React.createClass.React.Component之间的关系 1. React.createElement(HTML eleme ...

  6. React创建组件的三种方式及其区别

    内容转载于http://www.cnblogs.com/wonyun/p/5930333.html React推出后,出于不同的原因先后出现三种定义react组件的方式,殊途同归; 具体的三种方式: ...

  7. react 创建组件 (二)component

    因为ES6对类和继承有语法级别的支持,所以用ES6创建组件的方式更加优雅,下面是示例: import React from 'react'; class Greeting extends React. ...

  8. react 创建组件 (一)createClass

    如果你还没有使用ES6语法,那么定义组件,只能使用React.createClass这个helper来创建组件,下面是一段示例: var React = require("react&quo ...

  9. React创建组件的三种方式比较

    推荐文章: https://www.cnblogs.com/wonyun/p/5930333.html 创建组件的方式主要有: 1.function 方式 2.class App extends Re ...

随机推荐

  1. 哈希表,Java中的hashCode

    哈希表: 将我们所需的键通过哈希函数转换索引,然后存储在一个数组中. 哈希表是时间和空间之间的平衡,体现空间换时间的算法思想(联想到预加载,缓存等,有时候多存储,预处理缓存一些东西,带来时间复杂度的改 ...

  2. vue-cli 初始化项目时开发环境中的跨域问题

    最近刚刚完成自己的毕业设计(基于Vue的信息资讯展示与管理平台),于是想整理一下过程遇到的一些问题. 项目基于Vue开发,使用 Vue-cli 初始化项目文件目录时默认占用8080端口,而我又想使用 ...

  3. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 表单:复选框(Checkbox)和单选框(Radio)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  4. D. Restore Permutation 树状数组+二分

    D. Restore Permutation 题意:给定n个数a[i],a[ i ]表示在[b[1],b[i-1]]这些数中比 b[i]小的数的和,要你构造这样的b[i]序列 题解:利用树状数组 求比 ...

  5. Ajax接收Json数据,调用template模板循环渲染页面的方法

    一. 后台接口吐出JSON数据 后台php接口中,需要写三个部分: 1.1 开头header规定数据格式: header("content-type:application/json;cha ...

  6. python笔记12

    day12 今日内容 函数中高级(闭包/高阶函数) 内置函数 内置模块(.py文件) 内容回顾 函数基础概念 函数基本结构 def func(arg): return arg; v1 = func(1 ...

  7. 可旋转Treap(树堆)总结

    树堆,在数据结构中也称Treap,是指有一个随机附加域满足堆的性质的二叉搜索树,其结构相当于以随机数据插入的二叉搜索树.其基本操作的期望时间复杂度为O(logn).相对于其他的平衡二叉搜索树,Trea ...

  8. ttf格式文件

    TTF(TrueTypeFont):是一种字库名称.TTF文件:是Apple公司和Microsoft公司共同推出的字体文件格式.要使用的下载的字体文件只要把它(*.ttf)放到C:\WINDOWS\F ...

  9. 吴裕雄--天生自然JAVA数据库编程:执行数据库更新操作

    import java.sql.Connection ; import java.sql.DriverManager ; import java.sql.Statement ; public clas ...

  10. 蓝桥杯 2n皇后问题

    题意: 问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行.同一列或同一条对角线上,任意的两个白皇后都不在同一行.同一 ...