原理:通过三元表达式控制className
值。
render(){
const flag=true
return (
<div className={flag ? "active" : "no-active"}> Hello </div>
)
}
场景:交互就会涉及到事件点击,然后点击值传参也是一个很常见的场景。
import React from "react";
import { Button } from 'antd'
export default class Three extends React.Component{
state={
flag:true.
flagOne: 1
};
click(data1,data2){
console.log('data1 值为',data1)
console.log('data2 值为',data2)
}
render(){
return (
<div>
<Button type="primary" onClick={this.click.bind(this,'参数 1','参数 2')}>点击事件</Button>
</div>
</div>
);
}
}
作用:有些要通过自定义属性传值。
export default class Thirty extends React.Component{
click = e =>{
console.log(e.target.getAttribute("data-row"));
};
render() {
return (
<div>
<div data-row={"属性1"} data-col={"属性 2"} onClick={this.click}>
点击获取属性
</div>
</div>
);
}
}
内部没有封装像vue里面v-for
的指令,另外通过map
遍历。
{arr.map((item,index)=>{
return(
<div key={item.id}>
<span>{{item.name}}</span>
<span>{{item.age}}</span>
</div>
)
})}
作用:React.Fragment
可以让你聚合一个子元素列表,并且不在DOM
中增加额外的内核。
render(){
const {info} = this.state;
return(
<div>
{info.map{item,index)=>{
return(
<React.Fragment key ={index}>
<div>{{item.name}}</div>
<div>{{item.age}}</div>
</React.Fragment>
);
})}
</div>
);
}
React.cloneElement(
element,
[props],
[...children]
)
作用:这个方法的作用是复制组件,给组件传值或添加属性核心。
React.Children.map(children,child=>{
return React.cloneElement(child,{
count:__this.state.count
});
});
场景:有些后台返回是html
格式,就需要用到innerHTML
属性。
export default class TwentyFive extends React.Component{
render(){
return(
<div dangerouslySetInnerHTML={{ __html: "这是渲染的 HTML 内容" }}></div>
)
}
}
falsy
值(虚值)是在布尔值上下文中识别为false
的值;0,“”,“,``,null,undefined,NaN
export default class TwentyThree extends React.Component{
state={myVariable:null}
render(){
return(
<div>{String(this.state.myVariable)}</div>
)
}
}
作用:是基于ES6
类的React
组件,React
允许定义一个类或功能作为组件,那么定义一个组件类,就需要继承React.Component
。
export default class TwentyTwo extends React.Component{
render(){
return(
<div>这是技巧22</div>
)
}
}
一般用三元表达式
flag?<div>显示内容</div>:''
flag&&<div>显示内容</div>
场景:声明静态方法的关键字,静态方法是指即使没有组件实例也可以直接调用。
export default class Nine extends React.Component{
static update(data){
console.log('静态方法调用执行啦')
}
render() {
return (
<div>
这是 static 关键字技能
</div>
);
}
}
Nine.update('2')
}
方式1:ES5的功能定义
function FunCom(props){
return <div>这是Function 定义的组件</div>
}
ReactDOM.render(<FunCom name="Sebastian" />, mountNode
// 在 hooks 未出来之前,这个是定义无状态组件的方法,现在有了 hooks 也可以处理状态
方式2:ES5的createClass定义
const CreateClassCom = React.createClass({
render:function(){
return <div>这是React.createClass定义的组件</div>
}
})
方式3:ES6的扩展
class Com extends React.Component{
render(){
return(<div>这是React.Component定义的组件</div>)
}
}
ES5的createClass
是利用功能模拟类的写法做出来的es6; 通过es6添加类的属性创建的组件此组件创建简单。