React-学习总结

基础知识:

1. 组件名称开头必须大写

var NewList = React.createClass(){}

2.ReactDOM.render是React最基本的方法,用于将模板转化为HTML语言 并插入制定DOM节点

3.事件都使用骆驼命名法:onClick onChange

4、this.props.children 表示组件的所有子节点

var NotesList = React.createClass({
  render: function() {
    return (
      <ol>
      {
        React.Children.map(this.props.children, function (child) { // React 提供一个工具方法 React.Children 来处理 this.props.children
          return <li>{child}</li>;
        })
      }
      </ol>
    );
  }
});

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

上面代码的 NoteList 组件有两个 span 子节点,它们都可以通过 this.props.children 读取

5.获取DOM节点-ref属性

<input type="text" ref="txtData">

获取文本框的值

var inputDom = this.refs.txtData; // 不需要使用findDOMNode()方法

var data = inputDom.value;

6.React提倡所有的数据都是由父组件来管理,通过props的形式传递给子组件来处理 this.props

React开发的规范,组件内部的数据由state控制,外部对内部传递数据时使用 props

7.在组建中添加多个属性写法:

 var Info = React.createClass({
        render:function(){
            var myAttr = {
                ‘ref ‘: ‘txtData‘,
                ‘data-id‘: ‘inputID‘,
                ‘onClick‘: function () {
                    console.log("onClick");
                }
            }
            return <input type="button" {...myAttr} value={this.props.name} /> // {...myAttr}绑定多个属性
            }
        })
    ReactDOM.render(<Info name="I AM A BUTTON" />,document.getElementById(‘box‘));

DEMO:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>todolist</title>
    <script src="https://cdn.bootcss.com/react/15.4.2/react.min.js"></script>
    <script src="https://cdn.bootcss.com/react/15.4.2/react-dom.min.js"></script>
    <script src="https://cdn.bootcss.com/babel-standalone/6.22.1/babel.min.js"></script>
    <style>
        ul{margin:0;padding:0;}
        ul li{list-style: none;}
        .ul-box{margin-top:20px;}
        .ul-box li{margin-top:10px;}
        button{margin-left:10px;background: #f1f1f1;border:1px solid #e2e2e2;padding:6px 10px;}
        .input-txt{height: 27px;line-height: 27px;border:1px solid #e2e2e2;}
    </style>
</head>
<div id="container"></div>
<script type="text/jsx">
    // 增删改Demo
    // this.props.todo.map 循环
    var TodoList = React.createClass({
        // 初始化数据
        getInitialState:function(){
         return{
             todoList:[]
         }
        },
        // 更新数据
        changeHandle:function(rows){
            this.setState({
               todoList : rows
            })
        },
      render:function(){
          return(
                  <div>
                      <NewList onAdd={this.changeHandle} todo={this.state.todoList}/>
                      <ShowList onDel={this.changeHandle} todo={this.state.todoList} onSave={this.changeHandle}/>
                  </div>
          )
      }
    });

    // 新增
    var NewList = React.createClass({
        addHandle:function(e){
            e.preventDefault();
            // 从父组件获取数据 使用props
            var rows = this.props.todo;
          // 获取文本框的值
           var inputNew = this.refs.txtNewDate;
            var newData = inputNew.value.trim();
            if(newData != ""){
                // 追加到原来的数据中
                rows.push(newData);
                this.props.onAdd(rows);
            }
            inputNew.value = "";
                   },
        render:function(){
            return(
             <form onSubmit={this.addHandle}>
                 <input className="input-txt" type="text" placeholder="新增内容" ref="txtNewDate" id="txtNewDate"/>
                 <button onClick={this.addHandle}>新增</button>
             </form>
            )
        }
    })
    // 展示+修改+删除
    var ShowList = React.createClass({
        delHandle:function(e){
          // 获取要删除的索引
            var delIndex = e.target.getAttribute("data-key");
            this.props.todo.splice(delIndex,1);
            this.props.onDel(this.props.todo);
        },
        editHandle:function(e){
          // 将原本的值赋值到文本框
          // 将按钮文字改为保存
            var inputNew = document.getElementById("txtNewDate");
            //console.log(e.target.innerHTML)
            inputNew.value = e.target.getAttribute("data-item");
        },
        saveHandle:function(e){
            var saveIndex = e.target.getAttribute("data-key");
            var rows = this.props.todo;
            this.props.todo.map(function(item,i){
                if(i == saveIndex){
                    // 保存时存在相同id则删除原来的
                    rows.splice(saveIndex,1);
                }
            })
            var inputNew = document.getElementById("txtNewDate");
            var saveData = inputNew.value.trim();
            rows.push(saveData);
            this.props.onSave(rows);// 更新render
        },
        render:function(){
            return(
                    <ul className="ul-box">
                        {
                        // 循环li
                                this.props.todo.map(function(item,i){
                                    var id = "itemList";
                                   return(
                                           <li>
                                               <label data-id={id-i}>{item}</label>
                                               <button  data-key={i} onClick={this.delHandle}>删除</button>
                                               <button  data-key={i} data-item={item} onClick={this.editHandle}>修改</button>
                                               <button  data-key={i} onClick={this.saveHandle}>保存</button>
                                           </li>
                                   )
                                }.bind(this))
                        }
                    </ul>
            )

        }
    })
    ReactDOM.render(<TodoList/>,document.getElementById("container"));
</script>
</body>
</html>

学习参考:

http://www.ruanyifeng.com/blog/2015/03/react.html

https://www.cnblogs.com/wangfupeng1988/p/5302738.html

原文地址:https://www.cnblogs.com/ss977/p/8228267.html

时间: 2024-11-02 23:29:10

React-学习总结的相关文章

React学习系列

React学习系列 系列学习react 翻译地址 https://scotch.io/tutorials/learning-react-getting-started-and-concepts 我是初学者,英语也不是很好,不过一直强迫自己看英文文档. 这是理解翻译,翻译的不好,请见谅!()中的是我翻译过程中理解,参考下,有什么说的不对的欢迎指点下! 第一节:如何开始react和了解react的概念 1.React是什么 react是Facebook 开发出来用于促进UI交互,创建带有状态的,可复

React 学习路线

以下所谈及的,就是为你定制的 React 学习路线. 为了能稳固基础,我们一定要逐步地来进行学习. 倘若你正在建造一间房子,那么为了能快点完成,你是否会跳过建造过程中的部分步骤?如在具体建设前先铺设好部分石头?或直接在一块裸露的土地上先建立起墙面? 又假如你是在堆砌一个结婚蛋糕:能因为上半部分装饰起来更有趣,而直接忽略了下半部分? 不行吗? 当然不行.众所周知,这些做法只会导致失败. 因此,不要想着通过接触 React 来将 ES6 + Webpack + Babel + React + Rou

React学习笔记-1-什么是react,react环境搭建以及第一个react实例

什么是react?react的官方网站:https://facebook.github.io/react/下图这个就是就是react的标志,非常巧合的是他和我们的github的编辑器Atom非常相似.react是Facebook官方推出的一个javascript的库,现在已经有了非常多的库和框架Facebook为什么还要开发一款新的框架呢?原因就是 Facebook遇到了一些新的问题.Facebook需要解决的问题是构建数据不断变化的大型应用.大型应用是什么意思?数据不断变化带来什么问题呢? 

react学习小结(生命周期- 实例化时期 - 存在期- 销毁时期)

react学习小结 本文是我学习react的阶段性小结,如果看官你是react资深玩家,那么还请就此打住移步他处,如果你想给一些建议和指导,那么还请轻拍~ 目前团队内对react的使用非常普遍,之前对react使用不多,正好我目前在做的项目也在使用react+redux,借着这个机会系统的学习下react+redux. react是什么 react是一个JavaScript类库,通过react,我们可以构建可组合的UI,也就是说,我们可以通过重用组件来组合出我们的UI.可以说react的核心便是

React学习笔记 - 组件&amp;Props

React Learn Note 4 React学习笔记(四) 标签(空格分隔): React JavaScript 三.组件&Props 组件可以将UI切分成一些独立的.可复用的部件,这样你就只需专注于构建每一个单独的部件. 组件接收props,返回react元素. 1. 函数定义\类定义组件 最简单组件方式 - 函数定义组件: // 函数定义组件 function Welcome(props) { return <h1>Hello, {props.name}!</h1>

2019年React学习路线图

作者|javinpaul 译者|无明 之前我们已经介绍了 2019 年 Vue 学习路线图,而 React 作为当前应用最广泛的前端框架,在 Facebook 的支持下,近年来实现了飞越式的发展,我们将在下文中介绍 2019 年 React 学习路线图,希望给想学 React 的开发者一些借鉴. 下图是2018 年的 React 路线图,它非常全面,2018 年剩下的时间可能不够你学会所有这些,但不要担心,所有的技术在 2019 年仍然有效.   图片来源: https://github.com

【react学习】关于react框架使用的一些细节要点的思考

( _(:3 」∠)_给园友们提个建议,无论是API文档还是书籍,一定要多看几遍!特别是隔一段时间后,会有意想不到的收获的) 这篇文章主要是写关于学习react中的一些自己的思考: 1.setState到底是同步的还是异步的? 2.如何在子组件中改变父组件的state 3.context的运用,避免"props传递地狱" 4.组件类里有私有变量a,它到底改放在this.a中还是this.state对象中(作为属性a)呢? 1.setState到底是同步的还是异步的? class MyC

React学习笔记---项目构建

简介 ReactJs由于有FB的支持,得到了社区的极大关注,同时由于ReactJs只希望专一的做好View层次上的工作,所以本身并没有涉及很多周边工具. 今天要介绍一款工具,同时包含一个构建项目模板的工具,对于初学者来说,就有了一个可以学习.开发.测试的平台. Yeoman 官方的介绍是这样形容的:“Web App的脚手架工具” --- Yeoman的目的是帮助用户更好的启动项目,提供最好的实践和工具使用户保持高生产率. Yeoman提供了一个生成器的生态系统,并提供了一个“Yeoman的工作流

react学习笔记1

# 1.hello world 学习一个语言,最好的方式,我们需要去官网去查看文档(https://facebook.github.io/react),通过JSFiddle,便可以看到最简单的demo.目前为止最新版本为15.3.0,后续没有特别说明,我们都是基于该版本. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title&g

react学习

react实战 GitHub上给出react的三个关键点: 1.Just the UI (仅仅是view层) 2.Virtual Dom (虚拟Dom) 3.Data flow (数据流是沿着组件树从上到下单向流动的) 理解react可以参考 这里.这里,还有深入浅出React一.二.三.四. 以练手的博客为例.(学习新技术最快的途径就是实践,解决问题不断提高)[完整代码] react强调组件的开发方式,类似于搭积木.将一个网页拆分成一个个的组件,组件可以复用,组件之间可以嵌套使用,嵌套组件之间