React useState Hook:将setter传递给子功能更新,回调和useCallback

时间:2020-04-21 11:57:02

标签: javascript reactjs react-hooks

关于React钩子,我有几个相互关联的问题:useStateuseCallback


  1. 究竟何时需要functional update

1.1。如果setter函数接收到函数,则其参数将始终为先前的状态吗?


  1. 如果我想从子组件中更新父状态,应该如何将setter传递给子组件,将其包装在另一个函数中作为回调,如here所述?只是按照建议的here直接传递?

2.1。每种方法的原因和优点/缺点是什么?


  1. 如果我可以直接传递它而我正在使用备忘录,是否需要here中所述的useCallback?

  1. 如果要在从子级更新父状态时使用最新状态数据,该怎么办?

4.1。在这种情况下,传递回调给孩子有用吗?

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个问题的回答所说的那样。