Javascript 为什么useSelector中的选择器运行两次?

Javascript 为什么useSelector中的选择器运行两次?,javascript,reactjs,redux,react-hooks,render,Javascript,Reactjs,Redux,React Hooks,Render,为什么useSelector中的选择器运行两次 const选择器=(状态)=>{ log(“调用选择器”); 返回状态; }; 函数App(){ console.log(“渲染应用程序”); 常数计数=使用选择器(选择器); const dispatch=usedpatch(); 返回( 分派({type:“INCREMENT”}}>INCREMENT 分派({type:“减量”})}>减量 {count} ); } 下面是一个工作片段,显示每次装入子对象时都会运行两次选择器回调: co

为什么useSelector中的选择器运行两次

const选择器=(状态)=>{
log(“调用选择器”);
返回状态;
};
函数App(){
console.log(“渲染应用程序”);
常数计数=使用选择器(选择器);
const dispatch=usedpatch();
返回(
分派({type:“INCREMENT”}}>INCREMENT
分派({type:“减量”})}>减量
{count}

); }

下面是一个工作片段,显示每次装入子对象时都会运行两次选择器回调:

const{Provider,useDispatch,useSelector}=ReactRedux;
const{createStore,applyMiddleware,compose}=Redux;
函数计数(状态、操作){
console.log('reduction action:',action.type)
开关(动作类型){
案例“增量”:
返回{…state,count:state.count+1};
“减量”一案:
返回{…state,count:state.count-1};
违约:
返回状态;
}
}
const store=createStore(count,{count:0});
常量选择器=(状态)=>{
log(“调用选择器”,状态);
返回状态.count;
};
函数子(){
console.log(“呈现子项”);
常数计数=使用选择器(选择器);
const dispatch=usedpatch();
返回(
分派({type:“INCREMENT”}}>INCREMENT
分派({type:“减量”})}>减量
{count}

); } 常量应用=()=>{ const[show,setShow]=React.useState(true); 返回( 设置显示(s=>!s)}>切换子项 {显示?:'none'} ) } const rootElement=document.getElementById(“根”); ReactDOM.render( , 根元素 );
,因为它既在渲染阶段运行,也在调度操作之后运行。因此,第一个日志发生在呈现
时,第二个日志发生在单击按钮并发送更新存储状态的操作时


useSelector
在安装组件后第二次重新运行选择器,以检查在构建组件树时是否有由于调度操作而导致的任何其他更改。

如果使用正确,这应该不会是问题。你问这个问题是出于好奇还是与这种行为有关的实际问题?(XY问题)@idmean出于好奇。我不知道为什么第一次加载应用程序时,选择器也会运行两次。因为。但毕竟,在渲染时,控制台会出现双重显示,所以我删除了示例中的包装更新-
useSelector
在装载后运行第二次检查。
const selector = (state) => {
  console.log("invoke Selector");

  return state;
};

function App() {
  console.log("render App");

  const count = useSelector(selector);
  const dispatch = useDispatch();
  return (
    <div className="App">
      <button onClick={() => dispatch({ type: "INCREMENT" })}>Increment</button>
      <button onClick={() => dispatch({ type: "DECREMENT" })}>Decrement</button>
      <p>{count}</p>
    </div>
  );
}