React

  • Post author:
  • Post category:其他




构建 React 开发环境

  • npm install -g create-react-app
  • create-react-app 【my-app】
  • cd 【my-app】/
  • npm start



初识react


  • public/index.html



    id="root"



    src/index.js



    document.getElementById('root')

    关联
  • 注释 {/* */}



组件

代码1

function App(props){
  return(
    <div>{props.propsData}</div>
  )
}

//引用 
import App from './App';
 <App  propsData="父传子数据" />

代码2

import React from 'react';
class App extends React.Component {
  render() {
    return (
       <div>
         <h1>{this.props.propsData}</h1>
       </div>
    );
  }
}
export default App



生命周期


  • componentDidMount

    组件已被渲染到DOM后执行 生成定时器

  • componentWillUnmount

    组件从DOM中被移除 注销定时器



setState()、事件处理

  • react中不能直接修改state,可通过

    setState()

    /构造函数是唯一可以给

    this.state

    赋值地方
  • react事件的命名采用小驼峰式
class App extends React.Component {
   constructor(props) {
      super(props);
      this.state = {date:1};
      //在js中,class方法默认不会绑定this,为了在回调中使用this,需要bind进行绑定,或者使用箭头函数handleEvent = ()=>{}
      this.handleEvent = this.handleEvent.bind(this);
   }
 componentDidMount() {
      this.handleEvent()
   }
   handleEvent(){
      this.setState((state,props)=> ({
         date:state.date + 1
      }))
   }
   render() {
      return (
         <div onClick={this.handleEvent}>{this.state.date}</div>
      );
   }
}


事件的传递参数



通过

箭头函数

来实现:

onClick={(e) =>this.handleEvent('one数据')}




通过

Function.prototype.bind

来实现:

onClick={this.handleEvent.bind(this,'one数据')}



条件渲染

class App extends React.Component {
   constructor(props) {
      super(props);
      this.handleLoginClick = this.handleLoginClick.bind(this);
      this.handleLogoutClick = this.handleLogoutClick.bind(this);
      this.state = {isLoggedIn: false};
   }
   handleLogoutClick() {
      this.setState({isLoggedIn: false});
   }
   handleLoginClick() {
      this.setState({isLoggedIn: true});
   }
   render() {
      const isLoggedIn = this.state.isLoggedIn;
      let button;
      if (isLoggedIn) {
         button = <button onClick={this.handleLogoutClick}>Login</button>
      } else {
         button = <button onClick={this.handleLoginClick}>Logout</button>
      }
      return (
         <div>{button}</div>
      );
   }
}



运算符

  • &&:

    {10 > 3 && <h2>---{props.propsData}</h2>}
  • 三目运算:

    {0 > 3 ? <div>true</div> : <div>false</div>}



阻止组件渲染,通过

return null

实现



渲染多个组件

  • 通过

    map()

    方法来实现,尝试用

    forEach()

    无效

  • key

    给每一个元素赋予一个确定的标识
function App(){
   const Numdom = [1,2,3,4,5].map((item)=><li key={item}>{item}</li>);
   return(
      <ul>{Numdom}</ul>
   )
}




key

提取组件,如果提取一个组件

<App />

,应该把key保留在

<App key={index}/>

元素上,而不是

<App />

的子元素上

function ListItem(props) {
   const value = props.value;
   // key的不正确使用
   return ( <li key={value}>{value}</li>
   );
}
function App() {
   const listItems = [1,2,3,4].map((item) =>
      // key={item} 应该放在ListItem元素中
      <ListItem value={item} />
   );
   return (
      <ul>{listItems}</ul>
   );
}



JSX中允许大括号中嵌套任何表达式

比如:

function App(props) {
   return (
      <ul>
         {props.propsData.map((item,index)=>{
            return(<div>{index+1}.{item}</div>)
         })}
      </ul>
   );
}

待续。。。



版权声明:本文为weixin_56290677原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。