如何跟踪 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
字段指向对应于第二个状态值的另一个状态对象,它具有 10
的 baseState
值。
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.
在开始一个新的 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
字段指向对应于第二个状态值的另一个状态对象,它具有 10
的 baseState
值。
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.useStateinspect 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.