如何跟踪 React 钩子?

How to track React hooks?

在开始一个新的 React 项目之前,我想确保有(或将会有)好的开发人员工具来支持它。

我喜欢 React 的一个原因是 Google Chrome 的 React Developer 工具。它让我可以检查每个组件的内部状态。

问题:React Developer 工具是否显示 React 组件的挂钩状态?

如果不是,我如何检查 React 组件外部的内部钩子状态(也称为效果)?

简短的回答是否定的,React Devtool 并不完全显示组件的挂钩状态您想要的方式。您可以跟踪其实施进度 here.

长答案是肯定的,React Devtool 在技术上确实显示了挂钩的状态,但不是以您习惯的用户友好格式显示。状态以其原始实现形式显示,类似于链表:

{
  baseState: ...,
  baseUpdate: ...,
  memoizedState: ...,
  next: {
    baseState: ...,
    baseUpdate: ...,
    memoizedState: ...,
    next: ..., // The list goes on
    queue: ...,
  },
  queue: ...
}

对于具有两个状态的简单组件,Devtool 将状态显示为一个对象,其中 baseState 字段作为 'Mary' 的第一个状态值,并且有一个 next 字段指向对应于第二个状态值的另一个状态对象,它具有 10baseState 值。

function App() {
  const [name, setName] = useState('Mary');
  const [age, setAge] = useState(10);

  return (
    <div>
      <p>Name: {name}</p>
      <p>Age: {age}</p>
    </div>
  );
}

今天,Chrome Developers React toolbar可以显示钩子的状态。

见附图:

您可以使用 react-debug-hooks and Redux DevTools

检查 React.useState

inspect preview

  const [state, setState] = React.useState({
    loading: false,
    users: [],
    error: null
  }, 'users')  // you need to set a second parameter 'string' that will be shown on Redux devTools.