深入浅出React和Redux
上QQ阅读APP看书,第一时间看更新

1.2.1 JSX

所谓JSX,是JavaScript的语法扩展(eXtension),让我们在JavaScript中可以编写像HTML一样的代码。在ClickCounter.js的render函数中,就出现了类似这样的HTML代码,在index.js中,ReactDOM.render的第一个参数<App />也是一段JSX代码。

JSX中的这几段代码看起来和HTML几乎一模一样,都可以使用<div><button>之类的元素,所以只要熟悉HTML,学习JSX完全不成问题,但是,我们一定要明白两者的不同之处。

首先,在JSX中使用的“元素”不局限于HTML中的元素,可以是任何一个React组件,在App.js中可以看到,我们创建的ClickCounter组件被直接应用在JSX中,使用方法和其他元素一样,这一点是传统的HTML做不到的。

React判断一个元素是HTML元素还是React组件的原则就是看第一个字母是否大写,如果在JSX中我们不用ClickCounter而是用clickCounter,那就得不到我们想要的结果。

其次,在JSX中可以通过onClick这样的方式给一个元素添加一个事件处理函数,当然,在HTML中也可以用onclick(注意和onClick拼写有区别),但在HTML中直接书写onclick一直就是为人诟病的写法,网页应用开发界一直倡导的是用jQuery的方法添加事件处理函数,直接写onclick会带来代码混乱的问题。

这就带来一个问题,既然长期以来一直不倡导在HTML中使用onclick,为什么在React的JSX中我们却要使用onClick这样的方式来添加事件处理函数呢?