useState
和useCallback
。1.1。如果setter函数接收到函数,则其参数将始终为先前的状态吗?
2.1。每种方法的原因和优点/缺点是什么?
4.1。在这种情况下,传递回调给孩子有用吗?
答案 0 :(得分:1)
1。到底什么时候需要功能更新?
您可能需要更新组件上的任何状态。例如,您正在通过api从服务器获取用户,并且需要将该用户存储在组件中。为此,您需要useState来存储该用户对象。这是示例:
const [user, setUser] = useState({}); // declaration
let newUser = u; // u is coming from api
setUser(newUser);
1.1。如果setter函数接收到函数,则其参数将始终为先前的状态吗?
是的。 setComponent之类的setter函数用于类组件中。这是仅更新状态字段的示例:
this.setState({username: 'khabir'});
这里您要使用以前的状态来更新状态:
this.setState(prevState =>{
return{
counter : prevState.counter +1
}
})
2。如果要从子组件更新父状态,应该如何将setter传递给子组件,将其包装在另一个函数中作为回调,如here所述?只是按照建议的here直接传递?
两个示例都相同。您可以使用任何人。
3。如果我可以直接传递它,而我正在使用备忘录,是否需要按此处说明使用useCallback?
如果您从父组件传递了对子组件的任何函数引用,则该函数引用将在父的每个渲染器上创建,因此prevProps和props不再相同。 要应用备忘录,我们需要确保不必在每个Parent渲染器上都不必要地重新创建函数引用。这就是为什么要使用useCallback的原因。请完整阅读该文章以更好地理解。 4。如果要在从子级更新父级状态时使用最新状态数据,该怎么办? 不能直接从子组件更新父状态,但是可以将函数引用发送到子组件,并从在父组件上定义的子组件(该函数)调用该函数。在该函数主体(位于父级)中,您可以更新父级组件的状态。 4.1。在这种情况下,传递回调给孩子有用吗? 是的,就像我对第4个问题的回答所说的那样。