带注释

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. border 边框

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  2. (分块)楼房重建 HYSBZ - 2957

    题意 长度为n的坐标轴上,从1-n上的每一点都有一栋楼房,楼房的初识高度都为0,每一天都有一栋楼房的高度被修改(也可以不变),一栋楼房能被看见当且仅当其最高点与远点的连线不会与其他之前连线相交,问你每 ...

  3. 【WPF学习】第十三章 理解路由事件

    每个.NET开发人员都熟悉“事件”的思想——当有意义的事情发生时,由对象(如WPF元素)发送的用于通知代码的消息.WPF通过事件路由(event routing)的概念增强了.NET事件模型.事件路由 ...

  4. python接口自动化测试 - configparser配置文件解析器详细使用

    configparser简介 ConfigParser模块已在Python 3中重命名为configparser 该模块定义了ConfigParser类. ConfigParser类实现一种基本的配置 ...

  5. OpenCV在Mac下的部署 Java-IntelliJ IDEA

    目录 Xcode Command Line Xcode的证书许可 MacPorts的安装 环境变量的配置 安装OpenCV 安装确认 Idea配置 额外可能产生的问题 Xcode Command Li ...

  6. 远程桌面软件RDCMan汉化版

    自己汉化的远程桌面控制软件RDCMan--Remote Desktop Connection Manager(RDCMan) v2.7 简体中文汉化版. 介绍 Remote Desktop Conne ...

  7. 深入Java类加载全流程,值得你收藏

    先测试一番,全对的就走人 //题目一 class Parent1{ public static String parent1 = "hello parent1"; static { ...

  8. laravel 事件机制 实践总结

    laravel 事件机制 实践总结 观察者模式 在EventServiceProvider的linsten数组里面加上事件和监听器,键名是事件,键值里面的数组是一个或者多个监听器, protected ...

  9. CGI fastCgi php-fpm PHP-CGI 辨析

    CGI fastCgi php-fpm PHP-CGI 辨析 LNMP环境中的nginx是不支持php的,需要通过fastcgi插件来处理有关php的请求.而php需要php-fpm这个组件提供该功能 ...

  10. 死磕java(3)

    流程控制 if else // do while// switch case// while do// break// continue// 相关查询百度