react创建组件、jsx语法、绑定数据、本地存储-03

2019-11-29  本文已影响0人  逝去丶浅秋

一、创建组件

在src下创建一个components文件夹用来存放组件,接着创建自己的组件

import React,{Component} from 'react';
//创建一个组件
class MyComponent extends Component{
    render(){
        return(
            <div>MyComponent组件</div>
        )
    }
}
export default MyComponent;

创建好组件后需要引入组件,然后就可以使用组件了

import React from 'react';
//在根组件App.js处引入Home组件
import MyComponent from './components/MyComponent';
function App() {
  return (
    <div className="App">
      reactApp
      //在此处就可以使用引入的组件
      <MyComponent/> 
    </div>
  );
}
export default App;

组件名称首字母要大写,组件类名称首字母大写

export default是暴露组件,这样才可以在其他地方通过import导入组件。

export和export default的区别:

创建自定义的组件

var  Storage = {

    set(key,value){
        localStorage.setItem(key,JSON.stringify(value));   
    },
    get(key){
        return JSON.parse(localStorage.getItem(key));
    },
    remove(key){
        localStorage.removeItem(key);
    }

}
export default Storage;

如上所示,在需要的组件里面引入:

import Storage from '../utils/Storage.js'

然后使用Storage.setItem(key,value);来直接调用自定义组件里面的方法。
函数组件
react函数组件的两种写法:

const Example = () => {
    return <div/>
}

或是:

function Example(props) {
  return <div />;
}

二、jsx语法

1、return后如果有一行代码可以直接:
return <div>code</div>

如果是多行代码的话需要加括号:

retrun (
  <div></div>
)

react组件里面的所有节点要被一个根节点包含起来。

2、react中在标签上加样式

在标签上加样式需要使用{{}}双括号,如:

<hr style={{border:"1px solid"}}/> 

三、绑定数据

在组件中的构造函数中,构造函数中的super用在类的继承中,它指代父类的实例(即父类的this对象)。子类必须在constructor方法中调用super方法,否则新建实例时会报错。super要放在this之前。

constructor(){
    super();
    //react定义数据
    this.state={
           name:"aaa",
           age:"11",
          //定义对象
           user:{
                username:"username"
           }
    }
}
render(){
     return(
          <div>
             MyComponent组件<br/>
            //获取数据
             姓名:{this.state.name}
             年龄:{this.state.age}
             对象:{this.state.user.username}
          </div>
     );
}

{}绑定数据,state的数据{this.state.value},vat的数据{value}
react中绑定属性需要注意:

class要换成className 
for要换成htmlFor
style:
   1、<div style={{"color":"red"}}>我是个红色div</div>
   2、  
      style:{
           color:'red',
           fontSize:'30px'
      }
      <div style={this.state.style}>我是一个红色div</div>

      下面两种写法需要在css中定义:
       .red{
           color:red;
        }
        <div className={this.state.color}>我是一个红色div1</div>
        <div className='red'>我是一个红色div2</div>

react引入本地图片:

1、第一种方式
//通过模块化方式引入
import logo from '../assets/images/logo.svg';
//logo是全局变量,所以直接{logo}
<img src={logo} />
2、第二种方式:require中只能放字符串,不能放变量,如果图片文件夹放在public文件下是可以的放变量的
<img src={require('../assets/images/logo.svg')} />

react引入远程图片:

<img src="远程图片地址" />

react的list:
使用map函数进行遍历:

map<U>(callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): U[];
此函数意思是在数组的每个元素上调用定义的回调函数,并返回包含结果的数组。
最多接收三个参数,数组的每个元素调用一次callbackfn函数。
接收的三个函数:
value:数组中的值
index:值在数组中的位置
array:此数组
this.state={
  list1:['111','222','333'],
  list2:[<h2 key="1">h2标签1</h2>,<h2 key="2">h2标签2</h2>],
  list3:[
      {username:"aaa"},
      {username:"bbb"},
      {username:"ccc"}
  ]
}

遍历出来:

render(){
  let list1Result = this.state.list1.map(function(value,key){
      return(
          <li key={key}>{value}</li>
      )
  })
}
return(
  {this.state.list2}
  <ul>{list1Result}</ul>
  <ul>
  {
   this.state.list3.map(function(value,key){
      return(
           <li key={key}>{value.username}</li>
      )
    })
 }
 </ul>
)

需要在标签加上key,key的值不能重复。

四、操作数据及本地存储

1、数组的增删改查
list.push({
    title:title,
    checked:true
})
list.splice(key,1);
2、本地存储的增删改查

本地存储使用localStorage:

//通过JSON.stringify(value)将value转换为json数据
//通过JSON.parse(value)将json解析
localStorage.setItem(key,JSON.stringify(value)); 

写在最后:

上一篇下一篇

猜你喜欢

热点阅读