JSX入门

97 阅读2分钟

JSX使用方式

X表示扩展,JSX则是JS的扩展版

使用babel-loader即可使用类似Vue的标签式写法。

方法一:使用CDN引入

引入babel.min.js

<script>改成<script type="text/babel">

babel会自动进行转译

示例:


<body>

<div id="app"></div>

<script src="https://cdn.bootcss.com/react/16.10.2/umd/react.development.js"></script>

<script src="https://cdn.bootcss.com/react-dom/16.10.2/umd/react-dom.development.js"></script>

<script src="https://cdn.bootcss.com/babel-standalone/7.0.0-beta.3/babel.min.js"></script>

<script type="text/babel">

let n = 0;

const App = () => (

<div>//React.createElement('div')

{n}

<button

onClick={() => {

n += 1;

render();

}}

>

+1

</button>

</div>

);

const render = () =>

ReactDOM.render(<App />, document.querySelector("#app"));

render();

</script>

</body>

总结一下就是用标签的写法进行书写,如果要插入JS的变量或者函数就用{}括起来。

**但是这种方式不适合生产环境,效率较低。**它需要下载一个babel.min.js,还要在浏览器将JSX翻译成JS。

方法二:webpack+babel-loader

方法三:create-react-app

全局安装yarn global add create-react-app

初始化目录create-react-app react-demo-1

进入目录cd react-demo-1

开始开发yarn start

看App.js可以知道,webpack默认让js走babel-loader

JSX注意事项

注意className

<div className='red'>n</div>

被转译成

React.createElement('div',{className:'red'},"n")

插入变量

标签里面的所有js代码要用{}包起来

如果需要变量n,那么写成{n}

如果需要对象,也用{}抱起来,如:{name:'qyk'}

习惯return后加()

React里的条件判断

Vue中


<template>

<div>

<div v-if='n%2===0'>n是偶数</div>

<span v-else>n是奇数</span>

</div>

template>

React中


const Component = ()=>{

return n%2===0 ? <div>n是偶数</div> : <span>n是奇数</span>

}

//如果需要外面的div可以写成如下

const Component = ()=>{

return (

<div>

{n%2===0 ? <div>n是偶数</div> : <span>n是奇数</span>}

</div>

)

}

还可以写成


const Component = ()=>{

const content = (

<div>

{n%2===0 ? <div>n是偶数</div> : <span>n是奇数</span>}

</div>

)

return content

}

还可以写成


const Component = ()=>{

const inner = n%2===0> <div>n是偶数</div> : <span>n是奇数</span>

const content = (

<div>

{inner}

</div>

)

return content

}

当然也可以写成最原始的if-else


const Component = ()=>{

let inner

if(n%2===0){

inner = <div>n是偶数</div>

}else{

inner = <div>n是奇数</div>

}

const content = (

<div>

{inner}

</div>

)

return content

}

总结

在Vue中只能用Vue提供的语法

在React中可以随便写JS

循环语句

Vue中的循环语句


<template>

<div>

<div v-for="(n,index) in numbers"

:key = "index">

下标{{index}},值为{{n}}

</div>

</div>

</template>

React中的循环语句


const Component = (props)=>{

return (<div>

{props.numbers.map((n,index)=>{

return <div>下标{{index}},值为{{n}}</div>

})}

</div>)

}

还可以写成


const Component = (props)=>{

const array = []

for(let i = 0;i<props.numbers.length;i++){

array.push(<div>下标{i}值为{props.numbers[i]</div>)

}

return <div>{array}</div>

}

React的条件判断和循环语句都是通过原生JS来实现的