博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
React实战 -- todoList
阅读量:6813 次
发布时间:2019-06-26

本文共 4028 字,大约阅读时间需要 13 分钟。

0x01 前言

React现在比较火的前端组件化开发框架,近段时间开始慢慢的关注前端相关技术,本篇主要来介绍一个React的入门Demo todoList,相信很多刚刚开始接触React开发的人都会去实践一下。好了,下面就来感受下React的魔力。

0x02 搭建开发环境

用React开发一个应用,我该怎么定义工程,如何去开发?

create-react-app React应用开发脚手架工具,通过他我们可以快速的搭建好React开发工程。

1、npm install -g create-react-app yarn2、create-react-app todo-list3、cd todo-list4、yarn start

按照上面的步骤操作就可以搭建好一个完整的React开发工程。如果对npm和yarn命令不熟的可以自己行百度他们之间的用法和差异性。

基于这个构建好的工程,如果你想要剖析下这个工程为什么通过yarn start就可以启动起来、JSX语法在哪个阶段被打包成浏览器能够识别的JS文件的需要进一步对webpack进行了解。

webpack简介

如果将webpack当做一个黑盒子那么它就是一个对JS扩展(Jsx)、CSS扩展(Scss,Less)等进行预处理、文件打包工具。(由于Jsx、Scss、Less浏览器没法直接解析)

其最主要的特性:

  1. loads:不同的文件加载解析的方式不一样,可以通过不同的load加载其对应的文件。

  2. plugins:用于扩展webpack功能,是再一次构建过程中插入不同的操作处理逻辑。

0x03 编码实践

实践效果图

clipboard.png

实践思路

本次todoList 使用了antd组件的支持。

React开发基本可以理解为是React组件的开发,上面的todoList应用可以分为三个组件。

1、整个应用组件

class TodoList extends Component {    constructor(props) {        super(props);        this.state = {            todoList: []        }    }    handleChange(todo) {        var rows = this.state.todoList;        rows.push(todo);        this.setState({            todoList: rows        });    }    render() {        return (            
); }};

TodoList注册了回调给TypeNew在新增todo item的时候触发ListTodo去重新渲染。

2、新增todo组件

class TypeNew extends Component{    constructor(props) {        super(props);        this.state = {            inputText : ''        }    }    addTodo(e) {        if(this.state.inputText) {            this.props.onAdd(this.state.inputText);        }    }    changeInputVal(e) {        this.setState({            inputText: e.target.value        })    }    addTodoForBut() {        var value = this.inputTextRef.refs.input.value        if(value) {            this.props.onAdd(value);        }    }    emitEmpty() {        this.inputTextRef.focus();        this.setState({ inputText: '' });    }    render () {        const {inputText} = this.state;        const suffix = inputText ? 
: null; return (
this.inputTextRef = node} />
); }};

TypeNew渲染antd的Input组件,给组件注册了onChange事件,用于Icon的渲染与否,同时注册了enter事件触发TodoList组件状态的变化进行重新渲染。

3、显示todo列表组件

class ListTodo extends Component{    constructor(props) {        super(props)        this.state = {           data: []        };        this.refreshState();    }    getNowFormatDate() {        var date = new Date();        var dateSeperator = "-";        var year = date.getFullYear();        var month = date.getMonth() + 1;        var strDate = date.getDate();        if (month >= 1 && month <= 9) {            month = "0" + month;        }        if (strDate >= 0 && strDate <= 9) {            strDate = "0" + strDate;        }        var currentdate = year + dateSeperator + month + dateSeperator + strDate;        return currentdate;    }    refreshState() {        var rows = [];        for(var i=0; i < this.props.todo.length; i++) {            var row = {                key: i,                date:this.getNowFormatDate(),                todo:this.props.todo[i]            };            rows.push(row);        }        this.setState({            data:rows        });    }    componentWillReceiveProps() {        this.refreshState();    }    render () {        const columns = [{            title: '日期',            dataIndex: 'date',            key: 'date',        }, {            title: '代办事项',            dataIndex: 'todo',            key: 'todo',        }, {            title: '管理',            key: 'action',            render: (text, record) => (                                  Edit                                    Delete                            ),        }];        return (            /* 其中显示数据列表 */            
); }};

ListTodo在收到props的时候改变其自身的状态后渲染Table组件。

编辑和删除的功能都没有开发完,开发的思路基本和上面的思路类似,大家有兴趣可以自己实现一版。

0x04 总结

学了React理论还是要自己动手写个demo体会下怎么写,不然学习的过程中感觉也就那么回事,一说自己来实现发现完全动不了手,跟着学习教程多实践实践慢慢的就会领悟到其中的编程思想。

这也只是自己在React学习过程的一个入门篇,后面如果有机会在大型工程中进行实践的过程中肯定会还有更多的挑战需要面临,后面遇到问题再填坑总结吧。

转载地址:http://qlzzl.baihongyu.com/

你可能感兴趣的文章
Stringbuffer与Stringbuilder源码学习和对比
查看>>
Centos 学习大纲
查看>>
常见的JavaScript易错知识点整理
查看>>
RagingWire战略重点批发数据中心服务
查看>>
数据中心的规模是否影响虚拟化DCIM的决策?
查看>>
后流量时代,世间再无电信运营商
查看>>
李开复:钉钉是大胆的突破式创新
查看>>
夏普欲收回美洲品牌授权 海信总裁:严格按照合同办
查看>>
大数据市场迎来扩容期 本土内存数据库抢位崛起
查看>>
IPython4_Notebook
查看>>
rac问题思考总结
查看>>
Android 自定义View总结
查看>>
.NET平台开源项目速览(5)深入使用与扩展SharpConfig组件
查看>>
u-boot-1.3.4 移植到S3C2440
查看>>
HotSpot运行时概览#2
查看>>
Go结构体标签表达式v1.0发布,参数校验杀手锏
查看>>
对react中setState的总结
查看>>
[回炉计划]-实现一个图片预加载
查看>>
正则表达式
查看>>
360前端星计划学习-html
查看>>