这是一个更大的组件的一部分,但我在下面的一个可重复的例子中总结了它:
import React, {useState} from 'react'
function App() {
const [data,setData] = useState([{name:'first'},{name:'second'},{name:'three'}])
// Function to reverse a given array
const reverseArray = (array) => {
var reverseArray = array.reverse();
return reverseArray;
}
return (
<div>
{data.map((item,index)=>{
return <h1 key={index}>{item.name} index: {index}</h1>
})}
{/*When I click this I expect the div above to rerender */}
<button onClick={()=>{
var newData = data;
setData(reverseArray(newData))}
}>
Reverse Order
</button>
{/* Logs state to the console to check order is reversed */}
<button onClick={()=>console.log(data)}>Log Data</button>
{/* Clearing the state by setting to empty array */}
<button onClick={()=>setData([ ])}>Clear Data</button>
</div>
)
}
我知道React中的组件在状态改变时会重新呈现,为什么将新数组设置为状态不会触发这个呢?但是在清除状态时rerender是明显的?
我的沙盒:https://codesandbox.io/s/immutable-sun-oujqj?file=/src/app.js
演示:https://codesandbox.io/s/array-reverse-react-state-0v67h
array.prototype.reverse()
将元素反转到位。您需要将一个新数组传递到setdata()
中。
<button
onClick={() => {
var newData = data;
// Create a new array using the spread operator
setData(reverseArray([...newData]));
}}
>
问题内容: 我要说的是今天要学习react和redux,但是我不知道如何在状态更改后强制组件重新渲染。 这是我的代码: 我可以触发更新的唯一方法是使用 在构造函数内部,以便我手动触发组件的更新状态以强制重新渲染。 但是如何链接存储状态和组件状态? 问题答案: 仅当组件的状态或道具发生更改时,组件才会重新渲染。您不是依靠this.state或this.props,而是直接在render函数中获取存储
问题内容: 我是新来的世界,我有这样的话: 然后单击,您将被打印在控制台上。现在将行更改为: 现在点击该按钮,我希望它会被渲染。但事实并非如此。 我不确定为什么会这样。请注意,我在方法中有上面的代码。 问题答案: 您可能希望有一个状态组件,该状态组件在单击按钮之后在按钮旁边显示另一个组件。您需要做的就是跟踪按钮是否被单击:
但我的问题是我如何强制上面的功能组件重新呈现立即与钩子?
问题内容: 是否可以在React组件的状态下存储对象?如果是,那么我们如何使用来更改该对象中键的值?我认为在语法上不允许这样写: 同样,我还有一个问题:在React组件中可以有一组变量,以便可以在组件的任何方法中使用它们,而不是将它们存储在状态中,这还可以吗? 您可以创建一个包含所有这些变量的简单对象,并将其放在组件级别,就像在组件上声明任何方法一样。 很可能会遇到这样的情况,即您在代码中包含了很
我正在学习React钩子,这意味着我将不得不从类转移到函数组件。以前,在类中,我可以拥有与状态无关的类变量,我可以在不重新呈现组件的情况下更新这些变量。现在我试图用钩子重新创建一个组件作为函数组件,我遇到了这样一个问题:我不能(就我所知)为该函数创建变量,因此存储数据的唯一方法是通过钩子。然而,这意味着每当该状态更新时,我的组件将重新呈现。 我已经在下面的示例中说明了这一点,我试图将类组件重新创建
我知道mapstatetoprops正在将我们的Redux应用程序状态映射到我们的React组件道具,但是我不太明白当减速器返回一个新的状态时,幕后会发生什么——这是如何触发将道具映射到应用程序级别的组件的重新渲染的州? 在纯React中,setState触发重新渲染正确吗?类似的事情(或同样的事情)通过Redux发生吗?