reactjs

作者: 柒轩轩轩轩 | 来源:发表于2018-06-16 04:56 被阅读0次

阮一峰reactjs学习

1.html 模版

<!DOCTYPE html>
<html>
  <head>
    <script src="../build/react.js"></script>
    <script src="../build/react-dom.js"></script>
    <script src="../build/browser.min.js"></script>
  </head>
  <body>
    <div id="example"></div>
    <script type="text/babel">
      // ** Our code goes here! **
    </script>
  </body>
</html>

凡是使用 JSX 的地方,都要加上 type="text/babel",这是react特有的jsx语法
上面代码一共用了三个库: react.js 、react-dom.js 和 Browser.js ,它们必须首先加载。其中,react.js 是 React 的核心库,react-dom.js 是提供与 DOM 相关的功能,Browser.js 的作用是将 JSX 语法转为 JavaScript 语法

JSX基本语法规则

var names = ['Alice', 'Emily', 'Kate'];

ReactDOM.render(
  <div>
  {
    names.map(function (name) {
      return <div>Hello, {name}!</div>
    })
  }
  </div>,
  document.getElementById('example')
);

遇到 HTML 标签(以 < 开头),就用 HTML 规则解析;遇到代码块(以 { 开头),就用 JavaScript 规则解析
JSX 允许直接在模板插入 JavaScript 变量。如果这个变量是一个数组,则会展开这个数组的所有成员

var arr = [
 <h1>Hello world!</h1>,
 <h2>React is awesome</h2>,
];
ReactDOM.render(
 <div>{arr}</div>,
 document.getElementById('example')
);

这两个是等价的

const element = (
  <h1 className="greeting">
    Hello, world!
  </h1>
);

2.组件

表示组件的所有子节点

react允许将代码封装成组件
组件类第一个字母必须大写,并且需要有自己的render方法,而且只能包含一个顶层标签

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

3. this.props.children

this.props.children 值有三种可能:
如果当前组件没有子节点,它就是undefined 如果有一个子节点,数据类型是object 如果有多个子节点,数据类型就是array

4.Proptypes

组件的属性可以接受任意值,字符串、对象、函数等等都可以。有时,我们需要一种机制,验证别人使用组件时,提供的参数是否符合要求。
组件类的PropTypes属性,就是用来验证组件实例的属性是否符合要求

var MyTitle = React.createClass({
  propTypes: {
    title: React.PropTypes.string.isRequired,
  },

  render: function() {
     return <h1> {this.props.title} </h1>;
   }
});

此外,getDefaultProps方法可以用来设置组件属性的默认值

var MyTitle = React.createClass({
getDefaultProps: function(){
return{
title:'hello world'
};
},
render: function(){
return <h1>{this.props.title}</h1>;
});
ReactDOM.render(
  <MyTitle />,
  document.body
);

5. 获取真实的DOM节点

组件并不是真实的 DOM 节点,而是存在于内存之中的一种数据结构,叫做虚拟 DOM (virtual DOM)。
但是,有时需要从组件获取真实DOM的节点,这时就要用到ref属性

var MyComponent = React.createClass({
  handleClick: function() {
    this.refs.myTextInput.focus();
  },
  render: function() {
    return (
      <div>
        <input type="text" ref="myTextInput" />
        <input type="button" value="Focus the text input" onClick={this.handleClick} />
      </div>
    );
  }
});

ReactDOM.render(
  <MyComponent />,
  document.getElementById('example')
);

上面代码中,组件 MyComponent 的子节点有一个文本输入框,用于获取用户的输入。这时就必须获取真实的 DOM 节点,虚拟 DOM 是拿不到用户输入的。为了做到这一点,文本输入框必须有一个 ref 属性,然后 this.refs.[refName] 就会返回这个真实的 DOM 节点。
需要注意的是,由于 this.refs.[refName] 属性获取的是真实 DOM ,所以必须等到虚拟 DOM 插入文档以后,才能使用这个属性,否则会报错。上面代码中,通过为组件指定 Click 事件的回调函数,确保了只有等到真实 DOM 发生 Click 事件之后,才会读取 this.refs.[refName] 属性。

6.form

var Input = React.createClass({
  getInitialState: function() {
    return {value: 'Hello!'};
  },
  handleChange: function(event) {
    this.setState({value: event.target.value});
  },
  render: function () {
    var value = this.state.value;
    return (
      <div>
        <input type="text" value={value} onChange={this.handleChange} />
        <p>{value}</p>
      </div>
    );
  }
});

ReactDOM.render(<Input/>, document.body);

上面代码中,文本输入框的值,不能用 this.props.value 读取,而要定义一个 onChange 事件的回调函数,通过 event.target.value 读取用户输入的值。textarea 元素、select元素、radio元素都属于这种情况

7.组件的生命周期

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

  • Mounting:已插入真实DOM
  • Updating: 正在被重新渲染
  • Unmounting:已移出真实DOM
    React 为每个状态都提供了两种处理函数,will 函数在进入状态之前调用,did 函数在进入状态之后调用,三种状态共计五种处理函数。
componentWillMount()
componentDidMount()
componentWillUpdate(object nextProps, object nextState)
componentDidUpdate(object prevProps, object prevState)
componentWillUnmount()

此外,React 还提供两种特殊状态的处理函数。

componentWillReceiveProps(object nextProps):已加载组件收到新的参数时调用
shouldComponentUpdate(object nextProps, object nextState):组件判断是否重新渲染时调用

8. Ajax

组件的数据来源,通常是通过 Ajax 请求从服务器获取,可以使用 componentDidMount 方法设置 Ajax 请求,等到请求成功,再用 this.setState 方法重新渲染 UI

相关文章

  • React 生态系

    ReactJS ReactJS 是 Facebook 推出的 JavaScript 函式库,若以 MVC 框架来看...

  • 2019-03-21

    Reactjs javaScript

  • 一、React入门

    官网: 英文官网: https://reactjs.org/[https://reactjs.org/] 中文官网...

  • ReactJS:支持React开发,提供JSX代码提示,高亮显示

    ReactJS:支持React开发,提供JSX代码提示,高亮显示,ReactJS官方介绍 1、cdm→ compo...

  • 前端-08-React

    1.概述 https://reactjs.org/[https://reactjs.org/]构建用户界面的js库...

  • ReactJS初探(一)

    前端项目打算使用ReactJS+Webpack+ant-design来做。ReactJS的官网:https://r...

  • Android React-Native 之React JS笔

    React是由ReactJS与React Native组成,其中ReactJS是Facebook开源的一个前端框架...

  • reactjs

    阮一峰reactjs学习 1.html 模版 凡是使用 JSX 的地方,都要加上 type="text/babel...

  • reactJS

    1、script type = "type/babel" 2、渲染组件:只能有一个顶层标签。关键字使用classN...

  • ReactJs

    reactJs 用于创建用户界面的框架 使用jsx语法(javascript + xml) 页面引入: 页面依次...

网友评论

      本文标题:reactjs

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