todolist(react和vue都有实现)

本人是一个后台,,但是对于前端技术颇具兴趣,所以vue以前研究过一段时间,也在项目当中使用过,不过不是前后端分离,并没有使用到vue的精髓部分(template),只是使用其mvvm的开发方式,感觉还是很方便的,现在稍微看了下react,也被这语法深深吸引了,,所以写了两个todolist,大家感受一下:(以下代码新建一个html,拷进去就可以运行了,有什么不明白的,欢迎留言探讨……)

<!DOCTYPE html>
<html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <!-- react  -->
    <script src="https://unpkg.com/react@16/umd/react.development.js"></script>
    <script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
    <script src="https://unpkg.com/babel-standalone@6.15.0/babel.min.js"></script>

    <!-- vue  -->
    <script src="https://cdn.jsdelivr.net/npm/vue"></script>
    <style>
        .fail{
            color:red;
        }
    </style>
</head>
<body>
<div id="todo1"></div>
<div id="todo2">
    <input type="text" v-model="value"><button style="width:50px; height:30px;" @click="addObj">新增</button>
    <ul>
        <li v-for="obj in arr">
            {{ obj }}<span class="fail" @click="removeObj">×</span>
        </li>
    </ul>
</div>
</body>

<script type="text/babel">
/**** 基于es6模块化的写法 ****/
class Todo extends React.Component{

    constructor(props){
        super(props);
        // props可接受组件传入的属性prop
        alert('author: ' + props.author);
        // 初始化state的值
        this.state = {arr: [], id: 0};
        // 事件函数绑定this, 在class中事件函数的this必须显示的由自己来绑定,有三种方法,这是第一种
        this.handleFailClick = this.handleFailClick.bind(this, '李四')

    }

    handleClick(event) {
        let arr = this.state.arr;
        let id = this.state.id;
        // id是为了生成的元素的key属性,详细看react文档
        arr.push({data: this.state.value, id: id++});
        this.setState({arr: arr, id: id});
    }

    // 箭头函数是第二种函数的this绑定方法
    handleChange = (event) =>{
        this.setState({value: event.target.value})
    }

    handleFailClick(name, event){
        console.log(name)
        console.log(this.state);
        var liObj = event.target.parentNode;
        var ulObj = liObj.parentNode;
        ulObj.removeChild(liObj);
    }

    render(){
        return(
                <div>
                    <input type="text" onChange={this.handleChange}/><button onClick={this.handleClick.bind(this)} style={{ width:'50px', height:'23px',marginTop:'2px'}}>新增</button>
                    <ul>
                        {
                            this.state.arr.map((obj) => {
                                return(
                                        <li key={ obj.id.toString() }>{ obj.data }<span className='fail' onClick={this.handleFailClick}>×</span></li>
                                )
                            })
                        }
                    </ul>
                </div>
        )
    }
}
ReactDOM.render(<Todo author="sunh"/>, document.getElementById('todo1'))
</script>


<script>
/** 以下为vue的实现 **/ 
    var app = new Vue({
        el: '#todo2',
        data: {
            arr: [],
            value: null
        },
        methods: {
            addObj : function(event){
                console.log(event)
                this.arr.push(this.value);
            },
            removeObj(event){
                var target = event.target;
                var liObj = target.parentNode;
                var ulObj = liObj.parentNode;
                ulObj.removeChild(liObj);
            }
        }
    })
</script>

</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值