不使用 class Component ,仅在 React 中起作用
No using class Component , only function in React
你好,我刚刚在学习 React,我正在看教程,但在安装的版本中,React 不再使用 类,它只显示功能,我想继续这样,如果可能,但我有一个问题,我不知道在哪里可以通过单击更改此部分中的名称,但它不允许我访问 persons(const),我该怎么做?
import Person from './Person/Person'
function App() {
const persons = {
persons: [
{ name: 'Jose', age: 32},
{ name: 'Gabriel', age: 2}
]
}
const switchNameHandler = () => {
persons({
persons: [
{ name: 'Jose Fernando', age: 32},
{ name: 'Gabriel', age: 2}
]
})
}
return (
<div className="App">
<h1>Hi, I'm a React App!</h1>
<button onClick={switchNameHandler}> Switch Name</button>
<Person name={persons.persons[0].name} age={persons.persons[0].age}/>
<Person name={persons.persons[1].name} age={persons.persons[1].age}> I like play</Person>
</div>
);
}
export default App;
如何修复 switchNameHandler 部分?
我知道如果我使用类我可以访问this.setPersons,但是有什么方法可以不使用类访问吗?
您需要使用 useState
挂钩。所有挂钩 return 去结构化数组中的两件事 (1) 状态值和 (2) 设置该状态值的函数。您在 useState()
函数中输入的值是初始值。
例如:
const [name, setName] = useState("Ben");
这里name
的初始值为"Ben"
。如果我想更改该值,我可以使用 setName
函数并执行类似 setName("Jerry");
的操作。现在 name
的值为 "Jerry"
.
setter(在本例中为 setName
)和 this.setState
(在 class 组件中)之间的最大区别是 this.setState
记得如果您没有明确定义它,则会自动为您传播以前的状态。使用钩子,你必须自己做:
例如:
const [person, setPerson] = useState({ name: "", id: "", age: "" });
如果我有这个状态,并且只想编辑这个人的名字,我必须记住每次更新状态时通过使用回调函数传播前一个状态对象 - 其中回调中的参数是之前的状态:
// just updating name
setPerson(prevPerson => ({ ...prevPerson, name: "Bob" }));
在这里,唯一改变的是“名称”值,其他一切都保持不变:
结果:{ name: "Bob", id: "", age: ""}
查看反应文档以获取更多提示和示例:https://reactjs.org/docs/hooks-state.html
你好,我刚刚在学习 React,我正在看教程,但在安装的版本中,React 不再使用 类,它只显示功能,我想继续这样,如果可能,但我有一个问题,我不知道在哪里可以通过单击更改此部分中的名称,但它不允许我访问 persons(const),我该怎么做?
import Person from './Person/Person'
function App() {
const persons = {
persons: [
{ name: 'Jose', age: 32},
{ name: 'Gabriel', age: 2}
]
}
const switchNameHandler = () => {
persons({
persons: [
{ name: 'Jose Fernando', age: 32},
{ name: 'Gabriel', age: 2}
]
})
}
return (
<div className="App">
<h1>Hi, I'm a React App!</h1>
<button onClick={switchNameHandler}> Switch Name</button>
<Person name={persons.persons[0].name} age={persons.persons[0].age}/>
<Person name={persons.persons[1].name} age={persons.persons[1].age}> I like play</Person>
</div>
);
}
export default App;
如何修复 switchNameHandler 部分?
我知道如果我使用类我可以访问this.setPersons,但是有什么方法可以不使用类访问吗?
您需要使用 useState
挂钩。所有挂钩 return 去结构化数组中的两件事 (1) 状态值和 (2) 设置该状态值的函数。您在 useState()
函数中输入的值是初始值。
例如:
const [name, setName] = useState("Ben");
这里name
的初始值为"Ben"
。如果我想更改该值,我可以使用 setName
函数并执行类似 setName("Jerry");
的操作。现在 name
的值为 "Jerry"
.
setter(在本例中为 setName
)和 this.setState
(在 class 组件中)之间的最大区别是 this.setState
记得如果您没有明确定义它,则会自动为您传播以前的状态。使用钩子,你必须自己做:
例如:
const [person, setPerson] = useState({ name: "", id: "", age: "" });
如果我有这个状态,并且只想编辑这个人的名字,我必须记住每次更新状态时通过使用回调函数传播前一个状态对象 - 其中回调中的参数是之前的状态:
// just updating name
setPerson(prevPerson => ({ ...prevPerson, name: "Bob" }));
在这里,唯一改变的是“名称”值,其他一切都保持不变:
结果:{ name: "Bob", id: "", age: ""}
查看反应文档以获取更多提示和示例:https://reactjs.org/docs/hooks-state.html