react全家桶入门(1)

423 阅读3分钟

react基础

jsx

JSX,是一个 JavaScript 的语法扩展。我们在jsx中随意书写HTML和JavaScript, 所以这时候我们可以将一些js逻辑和html结合起来(如for,if等js语法)如

    function getNumber(num){
        if(num>5){
            return <div>好多呀</div>
        } else{
            return <div>没多少</div>
        }   
    }

纯函数

一个函数的返回结果只依赖于它的参数,并且在执行过程里面没有副作用。除了修改外部的变量,一个函数在执行过程中还有很多方式产生外部可观察的变化,比如说调用 DOM API 修改页面,或者你发送了 Ajax 请求,还有调用 window.reload 刷新浏览器,甚至是 console.log 往控制台打印数据也是副作用。

//纯函数
function(a,b){
    return a+b
}
//非纯函数
let c = 1
function(a,b){
    return a+b+c
}

react分函数组件和类组件

  • 函数组件性能更好,但是没有state,没有生命周期(现在可以用hooks解决),生成后销毁中间数据
  • 类组件有state,有生命周期,方便继承,生成后不能销毁

类组件实现一个Demo组件

  class Demo extends React.Component{
       constructor(props){
            super(props)
            this.state={
                name:1
            }
       }
       render(
            <div className="aaa"}>{this.state.name}</div>
       )
  }

函数组件是实现Demo组件

  function(props){
  
     const { userLogin } = props;//从props上获取属性
    const [name,setName] = useState(1)
    return (
       <div>{name}</div>
    )
  }

hooks

hook是你在函数组件里“钩入” React state 及生命周期等特性的函数

State Hook:useState

写法

const [count, setCount] = useState(0);
const [pageInfo, setPageInfo] = useState({

});
//懒加载用函数实现首次加载根据当前情况改变
let nowTime = 1
const [count, setCount] = useState(()=>{return nowTime+1});
//修改数据
setCount(1

count为状态名称,setCount为修改这个状态的唯一方法,并触发页面更新,0为这个状态的初始值 这样的好处就是在触发函数的时候以前要控制this指向从而获取state里面的值

<div onClick={setCount.bind(this))}></div>
//使用State Hook优化后的写法
<div onClick={() =>{setCount(2)})}></div>
useEffect 

effect Hook 可以让你在函数组件中执行副作用操作(因为函数组件内需要纯函数),可以利用useEffect来实现生命周期,如果在其中加入了定时器等需要清除的操作,就需要在return中清除

    useEffect(() => {    document.title = `You clicked ${count} times`;  });

useEffect可以传2个参数 第一个参数为function,触发调用函数, 第二个参数如果传值,则代表当第二个参数变化时触发(个人理解useEffect也可以当做watch),如果传一个空数组,则表示只渲染一次(个人理解就是vue的created) 从而实现生命周期

    //相当于created,修改title
    useEffect(() => {    document.title = `开始`;  },[]);
     //name变化时,触发
     useEffect(() => {    document.title = name;  },[name]);
      //组件卸载钱触发,相当于beforeDestory
     useEffect(() => {  return ()={  document.title = name;}  },[name]);
useRef

useRef 返回一个可变的 ref 对象,其 .current 属性被初始化为传入的参数(就是ref新用法)

function myInput(){
   const inputEl = useRef(null);
   return(
       <div>
         <input ref={inputEl} type="text" />
       </div>
   )
}

tag

  • react现在根节点如果不想要一个标签,可以这么写
function MyUl(){
	return (
    	<>
        	<li>1</li>
        	<li>2</li>
        </>
    )
}

传送门

react全家桶入门(2)