总结成一句话:能够返回一个值
的叫做js表达式
举例说明
举例说明
{}
包裹;
仅能混入 js表达式
,不能混入js语句
tips: 若是需要使用循环语句可以使用
map
,若是使用条件控制语句可以使用&&
null
、boolean
、undefined
虽然都是有效的子代,但它们不会直接被渲染
。因此有些组件是在 符合条件 的情况下才渲染 -> 可以结合&&
操作符使用(因为jsx中不能混入if 语句)
className
对象
<script type="text/babel">
class Mycomponent extends React.Component{
render(){
// 报错:Warning: Expected `onClick` listener to be a function, instead got a value of `string` type
// 原因:在jsx中混入js语法时需要使用{}包裹
return <h1 onClick='test'>测试事件绑定</h1>
}
test(){
console.log(this)
}
}
ReactDOM.render(<Mycomponent />, document.getElementById('test111'))
</script>
修改后
return <h1 onClick={this.test}>点击</h1>
需求: 将后端返回的数组[‘Angular’, ‘React’, ‘Vue’]渲染在页面上,每个数组元素以li元素进行渲染
实现
不能直接使用for循环-- 原因:jsx中只能混入js表达式
<div id="test">div>
<script crossorigin src="https://unpkg.com/react@16/umd/react.development.js">script>
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js">script>
<script src="https://unpkg.com/@babel/standalone/babel.min.js">script>
<script type="text/babel">
const arr =['Angular', 'React', 'Vue']
const vdom=(
// 类名使用className
<div className='main'>
<div className='title'>前端js框架列表</div>
<ul>
{
// 不能直接使用for循环-- 原因:jsx中只能混入js表达式
arr.map((item,index)=> <li key={index}>{item}</li>)
}
</ul>
</div>
)
ReactDOM.render(vdom,document.getElementById('test'))
script>
<script type="text/babel">
function Mycomponent(){
return (
<div>
<span>{false}</span>
<span>{true}</span>
<span>{null}</span>
<span>{undefined}</span>
</div>
)
}
ReactDOM.render(<Mycomponent />,document.getElementById('test'))
</script>
function Mycomponent(){
let [count , setCount] = React.useState(0)
return (
<div>
<span>{ count > 10 && '他给的太多了'}</span>
<button onClick={()=>{setCount( count+1 ); console.log(count > 10 && '他给的太多了') }}>点我++</button>
</div>
)
}
ReactDOM.render(<Mycomponent />,document.getElementById('test'))