初识reactJs 相关

       喽了一眼阮一峰老师的react文章,感觉写的挺棒,这篇只是按照自己思路屡一遍,纯属自学笔记,不承担社会暴乱责任。前几天,打算学vuejs,师兄给了一句话的点播,感觉很醍醐灌顶。总结下,所有这种能够实现数据双向绑定的JS框架,对于业务而言,最大的影响:实现了DOM的自动刷新。实现改了一个地方的数据,与之相关的DOM节点会自动变成对应的样子。不用我们 手动的 跟在 事件 后面 用冗余的JS操作DOM。

                                                                                                                             --------写在前面的话

react正文即将开始。。。。。。。

一:语法层面(有待补充)

1. class 改为className

2. for 改为 HTMLfor

3.<body style='color:this.state.color'>;改为 <body style={{color:this.state.color}}>

4. 所有react在html页面中写在<script type='text/label'></script>

5. 在react中所有HTML都是可以直接写的,js也是。JSX语法默认,碰到'<'执行html,碰到'{'执行JS语法。 

6.event.target.value 读取输入框的值。

三:具体使用(代码农民工,搬砖急需的。。。)

就按照正常的完成页面的逻辑,列举一下每个行为用reactJS怎么实现。如何获取渲染页面的数据------拿到数据渲染DOM--------操作DOM。

代码是拷贝的,注释是强行添加,o(╯□╰)o

<html>
  <head>
    <script src="../build/react.js"></script>
    <script src="../build/react-dom.js"></script>
    <script src="../build/browser.min.js"></script>
    <script src="../build/jquery.min.js"></script>
  </head>
  <body>
    <script type="text/babel">
var UserGist = React.createClass({
  getInitialState: function() {  <!--设置默认数据-->
    return {
      username: '',
      lastGistUrl: ''
    };
  },

  componentDidMount: function() {
    $.get(this.props.source, function(result)
    {<!--请求数据,处理数据-->
      var lastGist = result[0];
      if (this.isMounted()) {
      <!--将数据和DOM建立关系-->
        this.setState({
        <!--lastGist是刚刚自定义的数据名,userName是DOM中的取数据的key,owner,html_url,login都是数据源中的字段-->
          username: lastGist.owner.login,
          lastGistUrl: lastGist.html_url
        });
      }
    }.bind(this));
  },

  render: function() {
    return (
      <div>
       <!--将setState 中数据取出 -->
        {this.state.username}'s last gist is <a href={this.state.lastGistUrl}>here</a>.
      </div>
    );
  }
});

ReactDOM.render(
  <UserGist source="https://api.github.com/users/octocat/gists" />,
  <!--source是请求数据接口的链接-->
  document.body
);
<!--UserGist组件可以看成是一个渲染模板,数据源在实例化的时候提供-->
    </script>
  </body>
</html> 

二:关于react自定义组件相关(第2点我写了好多。。。好占地方就只能放最后了,氮素,看完这个才能看懂第二点。。。)

在这之前先贴两段阮一峰老师文章中的代码,展示下reactJS基本的语法和写法

1.下面这个是最基本的

<!DOCTYPE html>
<html>
  <head>balabala</head>
  <body>
    <div id="example"></div>
    <script type="text/babel">
      ReactDOM.render(
        <h1>Hello, world!</h1>,
        document.getElementById('example')
      );
    </script>
  </body>
</html>

2. 这个是业务一定会用的"组件"的写法规范

<html>
  <head>balabala</head>
  <body>
    <script type="text/babel">
      var NotesList = React.createClass({
        render: function() {
          return (
            <ol>
              {
                React.Children.map(this.props.children, function (child) {
                  return <li>{child}</li>;
                })
              }
            </ol>
          );
        }
      });

      ReactDOM.render(
        <NotesList>
          <span>hello</span>
          <span>world</span>
        </NotesList>,
        document.body
      );
    </script>
  </body>
</html>

1.2.:综上:

(1):所有通过调用组件或者基本的react代码渲染页面的代码都写在:reactDOM.render();

(2):组件相关

   1) 声明:var 组件名 = React.createClass({}),调用自定义组件<组件名 ></组件名>

   2) 自定义组件中一定要有的方法render()

   3)PropTypes,

        a:PropTypes,组件类的属性,这个里面的内容,用于验证实例的属性是否符合要求。可以定义属性的类型(number,string..),属性是否必须(isRequired)等

        b: 关于定义和使用。

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

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

      c: PropTypes使用详细说明

React.createClass({
  propTypes: {
    // You can declare that a prop is a specific JS primitive. By default, these
    // are all optional.
    optionalArray: React.PropTypes.array,
    optionalBool: React.PropTypes.bool,
    optionalFunc: React.PropTypes.func,
    optionalNumber: React.PropTypes.number,
    optionalObject: React.PropTypes.object,
    optionalString: React.PropTypes.string,

    // Anything that can be rendered: numbers, strings, elements or an array
    // (or fragment) containing these types.
    optionalNode: React.PropTypes.node,

    // A React element.
    optionalElement: React.PropTypes.element,

    // You can also declare that a prop is an instance of a class. This uses
    // JS's instanceof operator.
    optionalMessage: React.PropTypes.instanceOf(Message),

    // You can ensure that your prop is limited to specific values by treating
    // it as an enum.
    optionalEnum: React.PropTypes.oneOf(['News', 'Photos']),

    // An object that could be one of many types
    optionalUnion: React.PropTypes.oneOfType([
      React.PropTypes.string,
      React.PropTypes.number,
      React.PropTypes.instanceOf(Message)
    ]),

    // An array of a certain type
    optionalArrayOf: React.PropTypes.arrayOf(React.PropTypes.number),

    // An object with property values of a certain type
    optionalObjectOf: React.PropTypes.objectOf(React.PropTypes.number),

    // An object taking on a particular shape
    optionalObjectWithShape: React.PropTypes.shape({
      color: React.PropTypes.string,
      fontSize: React.PropTypes.number
    }),

    // You can chain any of the above with `isRequired` to make sure a warning
    // is shown if the prop isn't provided.
    requiredFunc: React.PropTypes.func.isRequired,

    // A value of any data type
    requiredAny: React.PropTypes.any.isRequired,

    // You can also specify a custom validator. It should return an Error
    // object if the validation fails. Don't `console.warn` or throw, as this
    // won't work inside `oneOfType`.
    customProp: function(props, propName, componentName) {
      if (!/matchme/.test(props[propName])) {
        return new Error('Validation failed!');
      }
    }
  },
  /* ... */
});

           d: getDefaultProps 方法可以用来设置组件属性的默认值。

 4):如何调用自定义组件中方法

  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> ); }

另外:支持的事件和属性等  官方提供列表文档

 5):如何获取真实节点

   在没添加到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')
);
原文地址:https://www.cnblogs.com/lihongfei0602/p/5006930.html