带注释

import React, { Component, Fragment } from 'react'
import './style.css' class TodoList extends Component {
constructor (props) {
super(props)
this.state = {
inputValue: '',
list: []
}
} render () {
return (
//Fragment 替代最外层的div
<Fragment>
<div>
{/* 写注释方式一 */}
{
// 写注释方式二,且方式二 { // } 不能在同一行
}
<label
// label中的for会与react中的for混淆,使用htmlFor替代for
htmlFor="insertArea"
>
输入内容:
</label>
<input
id="insertArea"
// class在react中是一个类关键词,使用className替代class类样式键名
className='input'
value={this.state.inputValue}
// 使用bind改变this指向,使得handleInputChange方法中的this可以取到constructor中的属性
onChange={this.handleInputChange.bind(this)}
/>
<button
onClick={this.handleBtnChange.bind(this)}
>
提交
</button>
</div>
<ul>
{/* 使用map循环list中的数据,每次增加一个li标签 */}
{
this.state.list.map((item, index) => {
return (
<li
key={index}
onClick={this.handleItemDelete.bind(this, index)}
// dangerouslySetInnerHTML 输入框语法转义
dangerouslySetInnerHTML={{__html: item}}
>
{/* {item} */}
</li>
)
})
}
</ul>
</Fragment>
)
} handleInputChange (e) {
this.setState({
inputValue: e.target.value
})
} handleBtnChange () {
this.setState({
list: [...this.state.list, this.state.inputValue],
inputValue: ''
})
} handleItemDelete (index) {
// immutable
// state 不允许我们做任何的改变
const list = [...this.state.list]
list.splice(index, 1)
this.setState({
list: list
})
}
} export default TodoList

原始代码

import React, { Component, Fragment } from 'react'
import './style.css' class TodoList extends Component {
constructor (props) {
super(props)
this.state = {
inputValue: '',
list: []
}
} render () {
return (
<Fragment>
<div>
{/* 写注释方式一 */}
{
// 写注释方式二,且方式二 { // } 不能在同一行
}
<label htmlFor="insertArea">输入内容:</label>
<input
id="insertArea"
className='input'
value={this.state.inputValue}
onChange={this.handleInputChange.bind(this)}
/>
<button
onClick={this.handleBtnChange.bind(this)}
>
提交
</button>
</div>
<ul>
{
this.state.list.map((item, index) => {
return (
<li
key={index}
onClick={this.handleItemDelete.bind(this, index)}
dangerouslySetInnerHTML={{__html: item}}
>
{/* {item} */}
</li>
)
})
}
</ul>
</Fragment>
)
} handleInputChange (e) {
this.setState({
inputValue: e.target.value
})
} handleBtnChange () {
this.setState({
list: [...this.state.list, this.state.inputValue],
inputValue: ''
})
} handleItemDelete (index) {
// immutable
// state 不允许我们做任何的改变
const list = [...this.state.list]
list.splice(index, 1)
this.setState({
list: list
})
}
} export default TodoList

React之JSX的语法细节的更多相关文章

  1. React的JSX语法及组件

    最近一个同事很急没有做任何交接就请了陪产假,然后我来维护.说实在的我一开始是一脸懵逼的.因为MV*项目里用的最多的还是Vue:React听说也了解过,但毕竟不熟... 不过不管如何这也是工作:同事也恭 ...

  2. React JSX基本语法规则

    JSX基本语法规则: 遇到HTML(以 < 开头)标签,就用HTML规则解析: 遇到代码块(以 { 开头),就用JavaScript规则解析. 它允许HTML和JavaScript的混写. 注意 ...

  3. 初学React:JSX语法

    这是本人初学React做的学习笔记;讲的不是很深,只算是简单的进行介绍. 这是一个小系列.都是在同一个模板中搭建的,但是代码是不能正常执行的. >>第一个组件.js 'use strick ...

  4. 前端笔记之React(一)初识React&组件&JSX语法

    一.React项目起步配置 官网:https://reactjs.org/ 文档:https://reactjs.org/docs/hello-world.html 中文:http://react.c ...

  5. React之JSX

    0.对于学习React,我们先来熟悉下JSX的语法, 下面的这些语法仅用于构建一个组件的标签模块,定义完成之后如果需要做演示,请附加以下代码: ReactDOM.render( element1, d ...

  6. React入门--------JSX

    React学习网站 React官方英文网站:http://reactjs.cn/react/docs/top-level-api.html React官方中文网站:http://www.css88.c ...

  7. React入门---JSX内置表达式-6

    个人理解:接触的JSX就是在React中render方法里面的js,因为里面只能有一个节点,所以你写的东西都在一个div中,要有js所以通过JSX来表达.(个人菜鸟理解,欢迎指正) React 使用 ...

  8. 【每天半小时学框架】——React.js的模板语法与组件概念

           [重点提前说:组件化与虚拟DOM是React.js的核心理念!]        先抛出一个论题:在React.js中,JSX语法提倡将 HTML 和 CSS 全都写入到JavaScrip ...

  9. 【02】react 之 jsx

    React与ReactDOM是react中核心对象,React为核心功能,ReactDOM提供对DOM的操作,以前的老版本中只有React没有ReactDOM,新版本中分离出ReactDOM提供两种渲 ...

随机推荐

  1. 自己动手搭环境—unit 1、Struts2环境搭建

    1.web.xml中增加Struts2配置 <filter> <filter-name>struts2</filter-name> <filter-class ...

  2. NameError:name ‘xrange’ is not defined

    原因: 在Python 3中,range()与xrange()合并为range( ). 我的python版本为python3.5. 解决办法: 将xrange( )函数全部换为range( ).

  3. Django CBV方法装饰器

    from django.utils.decorators import method_decorator 1.在post 或 get方法 添加 @method_decorator(装饰器) 2.给类添 ...

  4. .net core之编辑json配置文件

    .net core之编辑json配置文件 引言 最近在具体项目开发应用中,项目采用的json格式配置文件,配置文件的加载采用的IConfiguration接口对象进行的管理,这是.net standa ...

  5. GitHub Top 微信小程序——在家中憋了几天写点代码吧

    GitHub Top 本项目为 GitHub 热点项目微信小程序客户端,首页仅推荐一个热点项目,这个项目往往是社会热门事件所催生的一个项目,如 996.ICU.wuhan2020,所推荐项目标准为:积 ...

  6. Centos7搭建FastFDS----分布式文件服务系统服务端

    一.FastDFS介绍 FastDFS开源地址:https://github.com/happyfish100 参考:分布式文件系统FastDFS设计原理 参考:FastDFS分布式文件系统 1.1简 ...

  7. PYTHON经典算法-完美平方

    问题描述: 给定一个正整数n,找到若干个完全平方数(例如:1,4,9),使得 它们的和等于n,完全平方数的个数最少. 问题示例: 给出n=12,返回3,因为12=4+4+4:给出n=13,返回2,因为 ...

  8. Java框架-MyBatis三剑客之MyBatis Generator(mybatis-generator MBG插件)详解

    生成器设计思路: 连接数据库 -> 获取表结构 -> 生成文件 1 下载与安装 官网文档入口 最方便的 maven 插件使用方式 贴至pom 文件 2 新建配置文件 填充配置信息(官网示例 ...

  9. 手写 Promise

    在上一章节中我们了解了 Promise 的一些易错点,在这一章节中,我们会通过手写一个符合 Promise/A+ 规范的 Promise 来深入理解它,并且手写 Promise 也是一道大厂常考题,在 ...

  10. Docker底层架构之容器格式

    最初,Docker 采用了 LXC 中的容器格式.自 1.20 版本开始,Docker 也开始支持新的 libcontainer 格式,并作为默认选项.