react

作者: 喵呜Yuri | 来源:发表于2018-04-09 11:50 被阅读2次

React 特点
1.声明式设计 −React采用声明范式,可以轻松描述应用。

2.高效 −React通过对DOM的模拟,最大限度地减少与DOM的交互。##虚拟DOM

3.灵活 −React可以与已知的库或框架很好地配合。

4.JSX − JSX 是 JavaScript 语法的扩展。React 开发不一定使用 JSX ,但我们建议使用它。

5.组件 − 通过 React 构建组件,使得代码更加容易得到【】复用,能够很好的应用在大项目的开发中。

6.单向响应的数据流 − React 实现了【单向】响应的数据流,从而减少了重复代码,这也是它为什么比传统数据绑定更简单。

1创建

可以引入文件 react.min.js 、react-dom.min.js 和 babel.min.js:
在这里我们使用webpack构建工具
打开cmd

$ cnpm install -g create-react-app
image.png

打开你想放的文件夹

$ create-react-app my-app
image.png
image.png
$ cd my-app 进入文件夹
$ npm start  启动
image.png
image.png

2使用

1)基本结构是

<div id="root"></div>
ReactDOM.render(
<div>
    <h1>菜鸟教程</h1>
    <h2>欢迎学习 React</h2>
    <p data-myattribute = "somevalue">这是一个很不错的 JavaScript 库!</p>
    </div>
    ,
 document.getElementById('root')
);

可以演变成a)

<div id="root"></div>
<script src="index.js" ></script>

index.js

ReactDOM.render(
<div>
    <h1>菜鸟教程</h1>
    <h2>欢迎学习 React</h2>
    <p data-myattribute = "somevalue">这是一个很不错的 JavaScript 库!</p>
    </div>
    ,
 document.getElementById('root')
);

可以演变成b)

<div id="root"></div>

app.js

class App extends Component {
  render() {
    return (
      <div className="App">
        <header className="App-header">
          <img src={logo} className="App-logo" alt="logo" />
          <h1 className="App-title">Welcome to React</h1>
        </header>
        <p className="App-intro">
          To get started, edit <code>src/App.js</code> and save to reload.
        </p>
      </div>
    );
  }
}

export default App;

index.js

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

至于怎么易于管理,就在【组件】里面讲啦

2)运算方式

放在花括号里,还可以进行简单的三元运算

ReactDOM.render(
    <div>
      <h1>{1+1}</h1>
       <h2>{i == 1?'true':'false'}</h2>
    </div>
    ,
    document.getElementById('example')
);

3)样式

也放在大括号里

var myStyle = {
    fontSize: 100,
    color: '#FF0000'
};
ReactDOM.render(
    <h1 style = {myStyle}>菜鸟教程</h1>,
    document.getElementById('example')
);

4)标签

var MyComponent = React.createClass({/*...*/});
var myElement = <MyComponent someProperty={true} />;
ReactDOM.render(myElement, document.getElementById('example'));

5)常见错误

ReactDOM.render(
    <div class="div1"> </div>
    <div class="div2"> </div>
    ,
    document.getElementById('example')
);

只能包含一个顶层标签,应该这样

ReactDOM.render(
  <div class="divCon"> 
    <div class="div1"> </div>
    <div class="div2"> </div>
</div>
    ,
    document.getElementById('example')
);

3.组件

1.创建

var Hellodiv = React.createClass({
render:function(){
return <h1>Hello World!</h1>;
}
});
ReactDOM(<Hellodiv />,document.getElementById('root'))

注意事项

在创建一个render时,自定义的 React 类名以大写字母开头,例如Hellodiv不能写成hellodiv
2.获取属性
属性data-为前缀添加
React内的元素通过this.prop.XX来获取
例如

var Link = React.createClass({
  render: function() {
    return (
      <a href={this.props.site}>
        {this.props.site}
      </a>
    );
  }
});
var HelloMessage = React.createClass({
  render: function() {
    return (
<div>
<Link site={this.props.site} />
<h1>Hello {this.props.name}</h1>
</div>
)
  }
});
 
ReactDOM.render(
  <HelloMessage name="Runoob" site="http:www.baidu.com"/>,
  document.getElementById('example')
);

也可以用getDefaultProps() 方法为 props 设置默认值

var HelloMessage = React.createClass({
  getDefaultProps: function() {
    return {
      name: 'Runoob'
    };
  },
  render: function() {
    return <h1>Hello {this.props.name}</h1>;
  }
});
 
ReactDOM.render(
  <HelloMessage />,
  document.getElementById('example')
);

注意事项,在react属性中class 属性需要写成 className ,for 属性需要写成 htmlFor ,这是因为 class 和 for 是 JavaScript 的保留字。

4.状态

初始化相当于

var Hellodiv = React.createClass({
 /*这个方法名称是已经定义好的,不能改名称。用于定义初始状态*/
    getInitialState:function(){
        return {redorblue:this.props.defaultColor};
    },
render:function(){
return <h1>{redorblue}</h1>;
}
});
ReactDOM(<Hellodiv />,document.getElementById('root'))

5.React Props

state 和 props 主要的区别在于 props 是不可变的,而 state 可以根据与用户交互来改变。这就是为什么有些容器组件需要定义 state 来更新和修改数据。 而子组件只能通过 props 来传递数据。

var HelloMessage = React.createClass({
  getDefaultProps: function() {
    return {
      name: 'Runoob'
    };
  },
  getInitialState: function() {
    return {
      title: "菜鸟教程",
      site: "http://www.runoob.com"
    };
  },
  render: function() {
    return <h1>Hello {this.props.name}</h1>;
  }
});
 
ReactDOM.render(
  <HelloMessage />,
  document.getElementById('example')
);

验证prop的存在

var title = "菜鸟教程";
var MyTitle = React.createClass({
  propTypes: {
    title: React.PropTypes.string.isRequired,
  }
。。。。
});
ReactDOM.render(
    <MyTitle title={title} />,
    document.getElementById('example')
);

如果title没有值就会浏览器报错了


image.png

6.组件API

好了,我们开始正式开始哈哈哈哈
React 组件 API
在本章节中我们将讨论 React 组件 API。我们将讲解以下7个方法:

设置状态:setState
替换状态:replaceState
设置属性:setProps
替换属性:replaceProps
强制更新:forceUpdate
获取DOM节点:findDOMNode
判断组件挂载状态:isMounted
setState:

class Board extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      squares: Array(9).fill(null),
      xIsNext: true,
    };
  }

  handleClick(i) {
    const squares = this.state.squares.slice();
    squares[i] = this.state.xIsNext ? 'X' : 'O';
    this.setState({
      squares: squares,
      xIsNext: !this.state.xIsNext,
    });
  }

7.React 组件生命周期

组件的生命周期可分成三个状态:

Mounting:已插入真实 DOM
Updating:正在被重新渲染
Unmounting:已移出真实 DOM

相关文章

  • React基础

    react 教程 react 组件介绍 react state 介绍 react Props 介绍 React:组...

  • 学习react no.1

    学习react no.1 react 定义 react 特点 react

  • React Native 学习之路

    React 相关资料 React Components React Properties React State ...

  • React基础

    React包含react元素和react组件 react元素 react组件 react组件分为函数组件和类组件 ...

  • React面试题 整理脑图

    react基础 React生命周期 react-router react进阶 react Hooks redux 其他

  • react 导入中的 as

    import React from 'react'只导入 是 React。 而import * as React ...

  • ES5与ES6小结部分

    1var React=require('react'); 等价 import React from ' react...

  • React DnD基础概念和整体架构

    React DnD 的英文是 Drag and Drop for React。React DnD 是 React ...

  • React

    React 《React 官网文档》 React简介 React概念 React官网学习实践 - jSX简介 Re...

  • React学习笔记_01

    React 基础组件 react概述 npm i react react-dom react包 是核心,提供创建元...

网友评论

      本文标题:react

      本文链接:https://www.haomeiwen.com/subject/ryzhhftx.html