react基础语法使用实例分析
本文小编为大家详细介绍"react基础语法使用实例分析",内容详细,步骤清晰,细节处理妥当,希望这篇"react基础语法使用实例分析"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
一、渲染元素(函数方法、es6方式)
1、函数方法代码如下:
function Clock(props) { return ( Hello, world!
现在是 {props.date.toLocaleTimeString()}.
);}function tick() { ReactDOM.render( , document.getElementById('example') );}setInterval(tick, 1000);
2、es6方法代码如下:
class Clock extends React.Component { render() { return ( Hello, world!
现在是 {this.props.date.toLocaleTimeString()}.
); }} function tick() { ReactDOM.render( , document.getElementById('example') );} setInterval(tick, 1000);
二、组件
1、使用函数定义组件,代码如下:
function HelloMessage(props) { return Hello World!
;}
也可以使用ES6 class 来定义组件,代码如下:
class Welcome extends React.Component { render() { return Hello World!
; }}
2、如果我们碰到需要向组件传递参数的话,我们可以使用this.props
对象,代码如下:
function HelloMessage(props) { return Hello {props.name}!
;} const element = ; ReactDOM.render( element, document.getElementById('example'));
当然我们在添加属性的时候,class
属性需要写成class Name
,对于for
属性的话我们则需要写成htmlFor
,这是为什么呢?因为class
和for
是JavaScript的保留字,所以需要这么做。
3、复合组件
对于复合组件的话我们可以通过创建多个组件来进行组合成一个组件,既可以把不同的功能的组件进行分离,代码如下:
三、事件
当我们在通过使用ES6 class语法来定义一个组件的时候,事件处理器会成为类的一个方法,如下这个方法,我们通过Toggle组件渲染出一个可以让用户切换开关状态的按钮,代码如下:
class Toggle extends React.Component { constructor(props) { super(props); this.state = {isToggleOn: true}; // 这边绑定是必要的,这样 `this` 才能在回调函数中使用 this.handleClick = this.handleClick.bind(this); } handleClick() { this.setState(prevState => ({ isToggleOn: !prevState.isToggleOn })); } render() { return ( ); }} ReactDOM.render( , document.getElementById('example'));
但是呢,我们在使用的时候要注意;类的方法默认是不会绑定this的,如果我们忘记绑定this.handleClick
并把它传入onClik
,当你调用这个函数的时候this
的值会是undefined
,当然我们还可以使用下面这两种方式类解决;
(1)、当我们使用实验性的属性初始化器语法时,我们可以使用属性初始化器来正确的绑定回调函数,代码如下:
(2)、如果没有使用属性化器语法的话我们可以回调函数中使用的箭头函数,代码如下:
class LoggingButton extends React.Component { handleClick() { console.log('this is:', this); } render() { // 这个语法确保了 `this` 绑定在 handleClick 中 return ( ); }}
事件传参代码如下:
对于上面这两种方法是等价的,而且在我们的案例中参数e
作为时间对象将被作为第二个参数进行传递。通过箭头函数的方式,事件对象必须显式的进行传递,但是通过bind
的方式,时间对象以及更多的参数将会被隐式的进行传递。当然我们还要注意:需要通过bind
方式向监听函数传参,在类组件中定义的监听函数,事件对象e要排在所传参数的后面,代码如下:
四、条件渲染
我们在讲解条件渲染是先看看这两个组件,代码如下:
function UserGreeting(props) { return 欢迎回来!
;}function GuestGreeting(props) { return 请先注册。
;}
之后我们在创建个Greeting
组件,这个组件会根据用户是否登录来显示其中之一,代码如下:
function Greeting(props) { const isLoggedIn = props.isLoggedIn; if (isLoggedIn) { return ; } return ;} ReactDOM.render( // 尝试修改 isLoggedIn={true}: , document.getElementById('example'));
五、元素变量
我们可以使用变量来储存元素。它可以帮助你有条件的渲染组件的一部分,而输出的其他部分不会更改。在下面的例子中,我们将要创建一个名为 LoginControl
的有状态的组件。它会根据当前的状态来渲染
或
,它也将渲染前面例子中的
。代码如下:
class LoginControl extends React.Component { constructor(props) { super(props); this.handleLoginClick = this.handleLoginClick.bind(this); this.handleLogoutClick = this.handleLogoutClick.bind(this); this.state = {isLoggedIn: false}; } handleLoginClick() { this.setState({isLoggedIn: true}); } handleLogoutClick() { this.setState({isLoggedIn: false}); } render() { const isLoggedIn = this.state.isLoggedIn; let button = null; if (isLoggedIn) { button = ; } else { button = ; } return ( {button} ); }} ReactDOM.render( , document.getElementById('example'));
六、与运算发
我们可以通过用花括号包裹代码在 JSX 中嵌入任何表达式 ,也包括 JavaScript 的逻辑与 &&
,它可以方便地条件渲染一个元素,代码如下:
而其在 JavaScript 中,true
&& expression
总是返回 expression
,而 false && expression
总是返回 false
。因此,如果条件是 true,&& 右侧的元素就会被渲染,如果是 false,React 会忽略并跳过它。
(1)、三目运算符
条件渲染的另一种方法是使用 JavaScript 的条件运算符:导入代码:
render() { const isLoggedIn = this.state.isLoggedIn; return ( {isLoggedIn ? ( ) : ( )} );}
七、阻止组件渲染
我们在极少数情况下,你可能希望隐藏组件,即使它被其他组件渲染。让 render 方法返回 null 而不是它的渲染结果即可实现。那么现在我们来看看在下面的例子中,
根据属性 warn
的值条件渲染。如果 warn
的值是 false
,则组件不会渲染带代码如下:
function WarningBanner(props) { if (!props.warn) { return null; } return ( 警告! );} class Page extends React.Component { constructor(props) { super(props); this.state = {showWarning: true} this.handleToggleClick = this.handleToggleClick.bind(this); } handleToggleClick() { this.setState(prevState => ({ showWarning: !prevState.showWarning })); } render() { return ( ); }} ReactDOM.render( , document.getElementById('example'));
在代码中我,我们可以看到组件的 render 方法返回 null 并不会影响该组件生命周期方法的回调。例如,componentWillUpdate
和 componentDidUpdate
依然可以被调用。
八、列表
创建类别通过JavaScript的map()方法来进行,代码如下:
const numbers = [1, 2, 3, 4, 5];const listItems = numbers.map((numbers) =>
- {listItems}
在代码中可以将以上实例重构成一个组件,组件接收数组参数,每个列表元素分配一个 key
,不然会出现警告 a key should be provided for list items,
意思就是需要包含 key:代码如下:
function NumberList(props) { const numbers = props.numbers; const listItems = numbers.map((number) =>
- {listItems}
九、keys
对于这个keys来说他在 DOM 中的某些元素被增加或删除的时候帮助 React 识别哪些元素发生了变化。因此你应当给数组中的每一个元素赋予一个确定的标识。代码如下:
const numbers = [1, 2, 3, 4, 5];const listItems = numbers.map((number) =>
一个元素的 key 最好是这个元素在列表中拥有的一个独一无二的字符串。通常,我们使用来自数据的 id
作为元素的 key:代码如下:
const todoItems = todos.map((todo) =>
然而当元素没有确定的 id 时,你可以使用他的序列号索引 index
作为 key:代码如下:
const todoItems = todos.map((todo, index) => // 只有在没有确定的 id 时使用
但是如果元素没有确定的id,那么他可以是用index作为key,代码如下:
const todoItems = todos.map((todo, index) => // 只有在没有确定的 id 时使用
如果列表可以重新排序,不建议使用索引来进行排序,因为这会导致渲染变得很慢。
1、元素的key在兄弟之间应该是唯一的。
我们知道在数组元素中使用的 key 在其兄弟之间应该是独一无二的。然而,它们不需要是全局唯一的。当我们生成两个不同的数组时,我们可以使用相同的键,代码如下:
function Blog(props) { const sidebar = (
- {props.posts.map((post) =>
- {post.title} )}
{post.title}
{post.content}
{content}
当然了,key 也会作为给 React 的提示,但不会传递给你的组件。如果您的组件中需要使用和 key 相同的值,请将其作为属性传递:
代码如下:
const content = posts.map((post) => );
2、在js中嵌入map()
我们首先将单独的listtems
变量并将其包在js
中,代码如下:
function NumberList(props) { const numbers = props.numbers; const listItems = numbers.map((number) => ); return (
- {listItems}
JSX 允许在大括号中嵌入任何表达式,所以我们可以在 map()
中这样使用,代码如下:
function NumberList(props) { const numbers = props.numbers; return (
- {numbers.map((number) =>
读到这里,这篇"react基础语法使用实例分析"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。