1.组件内部可以是组件
import React from "react";
import ReactDOM from "react-dom";//渲染到页面上
// 可以是组件
class ChildA extends React.Component{
render(){
return
2.组件通过state属性来保存组件的内部状态变量
import React from "react";
import ReactDOM from "react-dom";
class Root extends React.Component {
state={value:‘abc‘};
render(){
return
3.state属性是只读的,只能通过setState()方法来修改
import React from "react";
import ReactDOM from "react-dom";
class Root extends React.Component {
state={value:‘abc‘};
render(){
setTimeout(()=>this.setState({value:"wang"}),2000); // 表示2秒后自动改变
return
4.组件内部各个兄弟组件间值的传递
class Root extends React.Component{
state={value:‘abc‘};
handlerChange(e){ // 绑定的函数
this.setState({value:e.target.value});
}
render(){
return (
5.复杂一点的封装
import React from "react";
import ReactDOM from "react-dom";
class ChildA extends React.Component{
render(){
return
6.怎样将外部组件里面的值传递出来 :组件之间通过props来通信
import React from "react";
import ReactDOM from "react-dom";
class InputComponent extends React.Component{ // 怎样将 InputComponent里面的值传递到下面的span里面
render(){
return this.props.value} OnChange={event=>this.props.change(event.target.value)}/>
} // 注意这里的 value属性 不能是固定的值否则的话 他就一直是这个值 不会改变
}
// 怎样将值传递出去 props组件间通信
class Root extends React.Component{
state={value:‘abc‘};
handlerChange(val){
this.setState({value:val});
}
render(){
return (
将span也封装成一个Component 也是通过props来传递属性的
class InputComponent extends React.Component {
render(){
return this.props.val} OnChange={e=>this.props.change(e.target.value)}/> // props可以传递的是函数
}
}
class Label extends React.Component {
render(){
return {this.props.val}
}
}
class Root extends React.Component {
state={value:"abc"};
handlerChange(val){
this.setState({value:val});
}
render(){
return (
7.props传递的值可以是任何东西,甚至是组件
class InputComponent extends React.Component{
render(){
return this.props.val} OnChange={event=>this.props.change(event.target.value)}/>
}
}
class Label extends React.Component {
render(){
return (
8.props的特殊属性
class InputComponent extends React.Component{
render(){
return this.props.value} OnChange={event=>this.props.onChange(event.target.value)}/>
}
}
class ChildA extends React.Component{
render(){
return (
input的value属性不能是一个固定的值,否则他就一直不变了
class Root extends React.Component{
state={value:"wang"};
change(e){
this.setState({value:e.target.value});
}
render(){
return (
9.无状态组件
react15才新引入无状态组件(也叫函数式组件) 因为大多数时候,组件是很简单的 不需要状态
也不需要生命周期函数,而只需要一个render函数,于是无状态组件应运而生。
const Root1 = props=>
ReactDOM.render(
因为是一个函数,所以也就没有 this 写起来十分简单 可以有 props
const Root = props=>(
ReactDOM.render(
10.需求:给组件加一个隐藏的 class Root extends React.Component { 11.如果要给每一个组件加上一个隐藏的div怎么实现 使用高阶组件 接受一个component返回一个Component const inject=function (Component) { // 接受一个Component,返回一个Component 12.高阶组件 装饰器的写法 const inject=function (Component) { 13.带参数的装饰器的写法 (1)不适用无状态组件的方式 const inject=id=>Comp=>class extends React.Component { 拆解该函数 接受 id 作为参数 返回接受组件作为参数的函数 ,作为组件作为参数的函数,返回一个包装后的组件 const inject=function (id) { (2)使用无状态组件来重写 该函数 (最后一步可以写成无状态组件的形式) const inject=id=>Comp=>props=>{ 14.解决传入的Component有属性的问题 const inject=id=>Comp=>props=>{ 15.组件的生命周期函数 class Root extends React.Component {
render(){
return (
}
}
ReactDOM.render(
return class extends React.Component{
render(){
return (
);
}
}
};
class Root extends React.Component {
render(){
return (
hello,world
}
}
const _Root=inject(Root);
ReactDOM.render(<_Root />,document.getElementById(‘root‘));
return class extends React.Component{
render(){
return (
}
}
};
@inject // 很遗憾目前es只支持类装饰器 不支持普通函数的装饰器
class Root extends React.Component {
render(){
return (
hello,world
}
}
ReactDOM.render(
render() {
return (
};
@inject(‘123456‘)
class Root extends React.Component {
render(){
return (
hello,world
}
}
ReactDOM.render(
return function (Comp) {
return class extends React.Component {
render(){
return (
}
}
};
@inject(‘123‘)
class Root extends React.Component {
render(){
return (
hello,world
}
}
ReactDOM.render(
return (
@inject(‘1234‘)
class Root extends React.Component {
render(){
return (
hello,world
}
}
ReactDOM.render(
return (
};
@inject(‘1234‘)
class Root extends React.Component {
render(){
return (
hello,{this.props.name}
}
}
ReactDOM.render(
state={value:0};
render(){
setInterval(()=>this.setState({value:this.state.value+1}),3000);
return
}
}
class App extends React.Component{
componentWillMount(){ // 第一次render 之前执行
console.log("componentWillMount",new Date());
}
componentDidMount (){ // 第一次render之后执行
console.log("componentDidMount",new Date());
}
componentWillReceiveProps(props){
this.props=props; //当props发生变更的时候执行
console.log("componentWillReceiveProps",new Date());
}
shouldComponentUpdate(props,state){
return true;//componentWillReceiveProps 之后 或者state发生改变的时候
}
componentWillUpdate(){ //除了首次render之外 每次render之前执行
console.log("componentWillUpdate",new Date());
}
componentDidUpdate(){ //除了首次render之外 每次render之后执行
console.log("componentWillUpdate",new Date());
}
componentWillUnmount(){ //卸载该组件的时候
console.log("componentWillUnmount",new Date());
}
render(){
console.log(‘render‘);
return ({this.props.value}
);
}
}
ReactDOM.render(
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有