react学习笔记

1)创建react组件

class ShoppingList extends React.Component {//组件名为ShoppingList
  render() {//render中 html标签的写法成为JSX语法
    return (
      <div className="shopping-list">
        <h1>Shopping List for {this.props.name}</h1>//通过this.props可以获取到父组件中传过来的值
        <ul>
          <li>Instagram</li>
          <li>WhatsApp</li>
          <li>Oculus</li>
        </ul>
      </div>
    );
  }
}
//从Board组件传递一个名为 value 的 prop 到 Square 当中:
class Board extends React.Component {
  renderSquare(i) {
    return <Square value={i} />;
  }
}

class Square extends React.Component {

  constructor(props) { //构造函数

   super(props);//调用父组件中的属性

   this.state = {
    value: null,    
  
  };
}
  render() {
    return (
      <button className="square" onClick={()=>{alert(this.props.value)}}>
        {this.props.value}//通过props调用父组件中的值
      </button>
    );
  }
}

 

注意

在 JavaScript class 中,每次你定义其子类的构造函数时,都需要调用 super 方法。因此,在所有含有构造函数的的 React 组件中,构造函数必须以 super(props) 开头。

 

class Animal{
    // 每一个类中都有一个构造器(构造函数),若没有指定构造器,那么这个构造器是隐形的,构造器的作用,就是每当new一个类,必然优先执行构造器中的代码
    constructor(name,age){
        this.name=name;//通过new实例的属性,叫做实例属性:dog.name
        this.age=age;
        // 静态属性,通过构造函数点出来的,直接访问到的属性叫做静态属性。构造函数名.属性
    }
    // 在class内部通过static修饰的属性就是静态属性,例如Animal.info;
    static info="白色的";
    //动物的实例方法
    say(){
        console.log("汪汪~")
    }
    //可以通过dog.say()来执行;
    //动物的静态方法
    static show(){
        console.log("yellow body")
    }
};
const dog=new Animal("大黄",3)

如果需要写的组件中只包含render方法,不包含state,则可以采用函数组件

function Square(props){
   return(
     <button class="square" onClick={props.handleClick(i)}>props.value</button>   
    )  
}    

 

classAnimal{// 每一个类中都有一个构造器,若没有指定构造器,那么这个构造器是隐形的,构造器的作用,就是每当new一个类,

必然优先执行构造器中的代码constructor(name,age){this.name=name;//通过new实例的属性,叫做实例属性:

dog.namethis.age=age;// 静态属性,通过构造函数点出来的,直接访问到的属性叫做静态属性。构造函数名.属性}// 在class内部通过static修饰的属性就是静态属性,

例如Animal.info;static info="白色的";//动物的实例方法say(){ console.log("汪汪~")}//可以通过dog.say()来执行;//动物的静态方法

staticshow(){ console.log("yellow body")}};const dog=newAnimal("大黄",3)

 

 

 

 

 

 

 

class Toggle extends React.Component {
  constructor(props) {
    super(props);
    this.state = {isToggleOn: true};

    // 为了在回调中使用 `this`,这个绑定是必不可少的
    this.handleClick = this.handleClick.bind(this);//修改this
  }

  handleClick() {
    this.setState(state => ({
      isToggleOn: !state.isToggleOn
    }));
  }

  render() {
    return (
      <button onClick={this.handleClick}>//绑定事件
        {this.state.isToggleOn ? 'ON' : 'OFF'}
      </button>
    );
  }
}

ReactDOM.render(
  <Toggle />,
  document.getElementById('root')
);

 react-router路由<switch>作用:当路由相同时,防止重复匹配(不加switch时,所有相同的路由都会匹配到,包括父级路由)

<BrowserRouter>
                <div>
                    <div>
                        <ul>
                            <li>
                                <Link to="/Guide/AboutUs">AboutUs</Link>
                            </li>
                        </ul>
                    </div>//没有switch时,下班这几个都会匹配到
                        <Route path="/Guide/ContactUs" component={ ContactUs } ></Route>
                        <Route path="/Guide/ContactUs" component={ ContactUs } ></Route>
                        <Route path="/Guide" component={ AboutUs } ></Route>
                </div>
            </BrowserRouter>
<Route>组件有如下属性:


path(string): 路由匹配路径。(没有path属性的Route 总是会 匹配);
exact(bool):为true时,则要求路径与location.pathname必须完全匹配;
strict(bool):true的时候,有结尾斜线的路径只能匹配有斜线的location.pathname;

 

posted @ 2020-11-02 15:15  dongxiaolei  阅读(110)  评论(0编辑  收藏  举报