接上篇文章React入门(二).
属性
PureComponent属性
- PureComponent:提供了一个具有浅比较的 shouldComponentUpdate 方法,其他和 Component 完全一直
import React, { PureComponent } from 'react'
class App extends PureComponent {
state = {
name: '标题',
list: ['夏日冷饮-1', '夏日冷饮-2', '夏日冷饮-3']
}
render() {
let { name, list } = this.state
return (
<div>
{}
{}
{}
<button onClick={() => {
list.push('我是添加的');
this.setState({
list:[...list]
})
}
}>添加</button>
</div>
)
}
}
export default App;
ref
- 作用:获取到当前所在的所有dom节点 在那个标签里面用就获取那个
- ref 一般是在 组件挂载完成之后及更新之后使用
看一个小案例(这里面需要安装一个滚动条的插件) 插件命令:npm install better-scroll --save
import React,{Component} from 'react'
import BScroll from 'better-scroll';
class Ref extends Component{
componentDidMount(){
new BScroll(this.refs.box)
}
render(){
let list=[...(','.repeat(100))]
return (
<div style={
{
width:"100px",
height:"200px",
border:"1px solid #000",
overflow:"hidden"}
}
ref='box'
>
<ul style={
{margin:0,
padding:0,
listStyle:"none"}
}
>
{
list.map((item,index)=>{
return <li key={index}>这是第{index}个</li>
})}
</ul>
</div>
)
}
}
export default Ref
children属性
- children属性:组件标签对之间的内容会被当做一个特殊的属性 props.children 传入组件内容
- 这个属性方便于父子传值
import React, { PureComponent } from 'react'
class Child extends PureComponent {
render() {
console.log(this.props);
let {children}=this.props
return (
<div>
{children}
</div>
)
}
}
class App extends PureComponent {
render() {
return (
<Child>
<h1>我是h1</h1>
<p>我是p</p>
</Child>
)
}
}
export default App;
dangerouslySetInnerHTML属性
- 他有两个{{}} // 第一个括号是 解析js语法 第二个括号是 一个js对象
import React, { PureComponent } from 'react'
class App extends PureComponent {
render() {
let message=`<h1>我来了<h1>`
return (
<div>
{}
<div dangerouslySetInnerHTML={
{__html:message}
}></div>
</div>
)
}
}
export default App;
函数式组件
- 函数组件: 没有 state ,this 和 生命周期,所以又被称为 无状态组件,在早期 react 版本中,被当前纯渲染组件来用
- 必须定义return return后面定义的是该组件要渲染的内容
- 该组件第0个参数是props,接收父级传来的信息
import React from 'react'
function Child(props){
return <div>{props.info}</div>
}
function fn(){
return (<div>
<Child info={'张'}></Child>
</div>)
}
export default fn;
Hook
- 它是:让你在不编写 class定义类 的情况下使用 state 以及其他的 React 特性 ()
- 优势:
1.可以使你在无需修改组件结构的情况下复用状态逻辑(自定义hook) 2.类组件难以理解,影响组件预编译,可以使你在非 class 的情况下可以使用更多的 React 特性
基本使用
import React, { useState } from 'react'
import Child from './child'
function Parent() {
let [data, setName] = useState({
name: '哈哈',
sex: 'nan',
age:10
})
return <div>
<Child info={data} />
<button onClick={
() => {
setName({
name: '嘿嘿',
sex: 'nv',
age:10
})
}
}>点一点</button>
</div>
}
export default Parent
子组件
import React,{useState} from 'react'
function Child(props){
console.log(props);
return <div>
{}
{}
{}
{}
<h1>{props.info.name}</h1>
<h1>{props.info.sex}</h1>
<h1>{props.info.age}</h1>
</div>
}
export default Child
useEffect方法
- useEffect相当于 componentDidMount(挂载完后) and componentDidUpdate(更新完成后)
这里是配合着上面的父组件使用的
import React,{useState, useEffect} from 'react'
function Child(props){
console.log(props);
useEffect(()=>{
console.log('触发了useEffect');
return ()=>{
console.log('return');
}
},[props.info.age])
return <div>
{}
{}
{}
<h1>{props.info.name}</h1>
<h1>{props.info.sex}</h1>
<h1>{props.info.age}</h1>
</div>
}
export default Child
自定义Hook
- 自定义hook 名称必须是以use开头的
定义Hook
import React,{useState} from 'react'
function useSize(){
let [data,setData]=useState('哈')
return [
data,
(da)=>{
console.log(da);
setData(da)
}
]
}
export {useSize}
使用你自定义的那个Hook
import React, { useState } from 'react'
import {useSize} from './hook'
function Parent() {
let [mz,setData]=useSize()
return <div>
{mz}
<button onClick={
()=>{
setData('hei1')
}
}>
自定义hook
</button>
</div>
}
export default Parent
本篇文章就到这里啦,后续还会继续更新的
|