Javascript JS中对象的锁定行为?

Javascript JS中对象的锁定行为?,javascript,reactjs,react-hooks,Javascript,Reactjs,React Hooks,每次单击递增按钮时: 期望值:当前计数已记录 实际情况:记录计数的初始值,即3 import React,{useState,useffect}来自“React”; 函数库(道具){ 常量[mapState,setMapState]=useState(未定义); useffect(()=>{ console.log(“设置映射”); //在安装组件时只运行一次 setMapState(props.map); }, []); useffect(()=>{ 如果(映射状态){ mapState.ke

每次单击
递增按钮时:
期望值:当前
计数
已记录
实际情况:记录
计数的初始值,即3

import React,{useState,useffect}来自“React”;
函数库(道具){
常量[mapState,setMapState]=useState(未定义);
useffect(()=>{
console.log(“设置映射”);
//在安装组件时只运行一次
setMapState(props.map);
}, []);
useffect(()=>{
如果(映射状态){
mapState.key();
}
}[道具];
返回;
}
导出默认函数App(){
const[count,setCount]=React.useState(3);
常量映射={key:()=>{
控制台日志(“fn”,计数);
}};
返回(
活动计数:{count}
{ 设置计数(计数+1); }} > 增量 ); }

JS中的对象是否在初始化后锁定其中变量的值

我想知道为什么object中的函数在调用时不使用当前值count,但在同一场景中React ref获得当前值

我不明白为什么会这样:
将map变量替换为以下内容:

const[count,setCount]=React.useState(3);
const stateRef=useRef();
stateRef.current=计数;
常量映射={key:()=>{
console.log(“fn”,stateRef.current);
}};
JS中的对象在初始化后是否会锁定其中变量的值? 没有

当它装载时,您有效地将
SomeLibrary
的状态设置为初始值,并且不再更新该状态,因此它会持续记录其初始值

const [mapState, setMapState] = useState(undefined);

useEffect(() => {
  console.log("setting map");
  // Run only once at mount of component
  setMapState(props.map); // <-- no other `setMapState` exists
}, []); // <-- runs once when mounting

但是,请注意,
SomeLibrary
的状态在
App
之后是一个渲染周期。这是因为
SomeLibrary
中排队状态更新的值在下一个渲染周期之前不可用。在本地组件状态中存储传递的道具也是一种反模式(很少有例外)

为什么React ref在同一场景中获取当前值?
const[count,setCount]=React.useState(3);
const stateRef=useRef();
stateRef.current=计数;//{

console.log(“fn”,stateRef.current);//故意不更新mapState。抱歉,如果意图不明确,但我想知道为什么它与
stateRef.current
使用ref.current和state变量之间有什么区别?@Anant_Kumar当react组件道具或state update时,会触发重新渲染。
useRef
不会,它用于ld值介于渲染周期之间或整个渲染周期之间。您是否介意扩展对ref的使用,以及究竟替换了什么,即“用此替换贴图…”bit?你在问题中写的方式不清楚什么被交换/替换,什么被传递到
SomeLibrary
。糟糕的是,它应该是
console.log(“fn”,stateRef.current);
@Anant\u Kumar更新了答案,并解释了为什么使用ref似乎有效。
useEffect(() => {
  console.log("setting map");
  // Run only once at mount of component
  setMapState(props.map);
}, [props.map]);
const [count, setCount] = React.useState(3);
const stateRef = useRef();
stateRef.current = count; // <-- stateRef is a stable reference

const map = { key: () => {
  console.log("fn", stateRef.current); // <-- ref enclosed in callback
}};