在 React 中更新嵌套状态属性
当我们尝试在 React 中更新组件的初始状态时,这意味着我们希望该初始状态能够响应用户的操作或系统事件而改变。
当初始状态改变或更新时,浏览器上显示的信息也会改变。这是因为 React 使用更新的代码再次渲染组件。
setState()
函数是主要的 React 函数,可以更新组件的嵌套状态。
在我们设置了组件的初始状态后,React setState()
是调用来初始化新状态的函数。因为我们需要用户触发一个事件,所以我们将在 setState()
旁边应用 onClick
函数来监听用户采取的操作,然后渲染更新的状态组件。
现在,我们将查看各种示例,这些示例演示了如何更新嵌套组件的初始状态。
在本例中,我们将使用 setState()
方法更新初始状态组件,我们将更新数组中存在的单个条目:
代码片段(App.js
):
import React, { Component } from 'react'
class App extends Component {
constructor(props){
super(props)
// Set initial state
this.state = {greeting :
'Click the button to receive greetings'}
// Binding this keyword
this.updateState = this.updateState.bind(this)
}
updateState(){
// Changing state
this.setState({greeting :
'Welcome!!!'})
}
render(){
return (
<div>
<h2>Greetings Portal</h2>
<p>{this.state.greeting}</p>
{/* Set click handler */}
<button onClick={this.updateState}>
Click me!
</button>
</div>
)
}
}
export default App;
输出:
设置组件的初始状态后,我们需要先将 greeting
关键字绑定到 updateState
函数,这样 React 就会知道在组件中查找哪个关键字并进行更改。
然后我们使用 setState
函数来编码出我们希望 greeting
关键字返回的数据。
最后,我们使用带有 updateState
函数的 onClick
事件侦听器,这样当用户点击 Click me!
时按钮,浏览器上的信息被更改和更新。
这个例子与前面的例子更相似。但是在这里,我们正在处理组件状态中的多个条目。
代码片段(App.js
):
import React, { Component } from 'react'
class App extends Component {
constructor(props){
super(props)
// Set initial state
this.state = {
test: "Nil",
questions: "0",
students: "0"
}
// Binding this keyword
this.updateState = this.updateState.bind(this)
}
updateState(){
// Changing state
this.setState({
test: 'Programming Quiz',
questions: '10',
students: '30'
})
}
render(){
return (
<div>
<h2>Test Portal</h2>
<p>{this.state.test}</p>
<p>{this.state.questions}</p>
<p>{this.state.students}</p>
{/* Set click handler */}
<button onClick={this.updateState}>
Click me!
</button>
</div>
)
}
}
export default App;
输出:
设置第一个状态后,我们绑定 this.state
关键字。之后,我们继续更新数组中元素的状态。
因为我们要处理多个元素,所以我们将每个项目放入一个段落元素中,以便在网页上呈现它时像列表一样显示它。
在这个例子中,我们使用道具来更新初始状态。Props 是属性的简称。
此方法非常适合处理包含数组中的多个项目和复杂数据形式的任务,并且有助于轻松更新状态。
就像上面的例子一样,我们在 App.js
中进行编码。
代码片段(App.js
):
import React, { Component } from 'react'
class App extends Component {
static defaultProps = {
testTopics : [
'React JS', 'Node JS', 'Compound components',
'Lifecycle Methods', 'Event Handlers',
'Router', 'React Hooks', 'Redux',
'Context'
]
}
constructor(props){
super(props)
// Set initial state
this.state = {
testName: "React js Test",
topics: ''
}
// Binding this keyword
this.updateState = this.updateState.bind(this)
}
listOfTopics(){
return (
<ul>
{this.props.testTopics.map(topic => (
<li>{topic}</li>
))}
</ul>
)
}
updateState(){
// Changing state
this.setState({
testName: 'Test topics are:',
topics: this.listOfTopics()
})
}
render(){
return (
<div>
<h2>Test Information</h2>
<p>{this.state.testName}</p>
<p>{this.state.topics}</p>
{/* Set click handler */}
<button onClick={this.updateState}>
Click me!
</button>
</div>
)
}
}
export default App;
输出:
我们首先在 testTopics
数组中传递多个数据。然后我们将数据的初始状态设置到 testName
数组中。
在将 testName
关键字绑定到 updateState
之后,我们创建一个 listOfTopics
函数,它将 testTopics
数组中的项目作为状态为 topic
的列表返回。
然后我们在 onClick
事件监听器旁边使用 setState()
函数,这样当 Click me!
按钮被打孔,项目列表将显示在初始状态 React js Test
的位置。
这是一个数值示例,我们希望初始值增加。在这种情况下,我们希望初始状态增加而不是改变。
因为我们希望初始状态增加,我们将在 useState()
函数中传递 prevState
作为参数,而 useState()
将在箭头函数中使用。
代码片段(App.js
):
import React, { Component } from 'react'
class App extends Component {
constructor(props){
super(props)
// Set initial state
this.state = {
count: 0
}
// Binding this keyword
this.updateState = this.updateState.bind(this)
}
updateState(){
// Changing state
this.setState((prevState) => {
return { count: prevState.count + 1}
})
}
render(){
return (
<div>
<h2>Click Counter</h2>
<p>You have clicked me {this.state.count} times.</p>
{/* Set click handler */}
<button onClick={this.updateState}>
Click me!
</button>
</div>
)
}
}
export default App;
输出:
我们在 setState
函数中调用 prevState
,以便当单击按钮时,它会识别数据所处的最后一个状态并将该状态增加 1,正如我们在 return
数组中设置的那样,将计数增加 1.
在 React 中更新组件的状态有多种用途。但是,通过我们讨论过的示例,编码人员应该能够在任何情况下应用不同的用例。
相关文章
在 React 中循环遍历对象数组
发布时间:2023/03/18 浏览次数:124 分类:React
-
在 React 中循环对象数组: 使用 map() 方法迭代数组。 我们传递给 map() 的函数会为数组中的每个元素调用。 该方法返回一个新数组,其中包含传入函数的结果。 export default function App (
获取 React 中元素的类名
发布时间:2023/03/18 浏览次数:162 分类:React
-
在 React 中使用 event.target 获取元素的类名 获取元素的类名: 将元素上的 onClick 属性设置为事件处理函数。 访问元素的类名作为 event.currentTarget.className 。 export default function App () { cons
如何将 key 属性添加到 React 片段
发布时间:2023/03/18 浏览次数:152 分类:React
-
使用更详细的片段语法将 key 属性添加到 React 片段,例如 React.Fragment key={key} 。 更冗长的语法实现了相同的结果对元素列表进行分组,而不向 DOM 添加额外的节点。 import React from react
如何在 React 中删除事件监听器
发布时间:2023/03/15 浏览次数:203 分类:React
-
在 React 中删除事件监听器: 在 useEffect 挂钩中添加事件侦听器。 从 useEffect 挂钩返回一个函数。 当组件卸载时,使用 removeEventListener 方法移除事件监听器。 import {useRef, useEffect} from r
React 中在 map() 中使用条件跳出map
发布时间:2023/03/15 浏览次数:198 分类:React
-
React 中在 map() 中使用条件: 在数组上调用 map() 方法。 使用 if 条件,如果条件满足则显式返回。 否则返回不同的值或返回 null 以不呈现任何内容。 export default function App () { const arr =
在 React 中调用多个 onClick 函数
发布时间:2023/03/15 浏览次数:160 分类:React
-
在 React 中调用多个 onClick 函数: 在元素上设置 onClick 属性。 在事件处理函数中调用其他函数。 事件处理函数可以根据需要调用尽可能多的其他函数。 export default function App () { const s
在 React 中按类名查找所有元素
发布时间:2023/03/15 浏览次数:171 分类:React
-
在 React 中通过 className 查找所有元素: 使用 getElementsByClassName 方法获取具有特定类的所有元素。 将对该方法的调用放在 useEffect() 钩子中。 import {useEffect} from react ; const App = () = { useEf
在 React 中检查元素是否获取到焦点
发布时间:2023/03/15 浏览次数:154 分类:React
-
要检查元素是否在 React 中获得焦点: 在元素上设置 ref 属性。 元素呈现后,检查元素是否是文档中的活动元素。 如果是,则该元素被聚焦。 import {useEffect, useRef} from react ; export defaul
在 React 中悬停时显示元素或文本
发布时间:2023/03/13 浏览次数:160 分类:React
-
在 React 中悬停时显示元素或文本: 在元素上设置 onMouseOver 和 onMouseOut 属性。 跟踪用户是否将鼠标悬停在状态变量中的元素上。 根据状态变量有条件地渲染另一个元素。 import {useStat