为什么即使状态发生变化,反应也不会显示更新的值?
Why react does not show updated value even if state changes?
我正在尝试使用 ReactJS 并遇到了一个问题。我只想根据 BootstrapSwitchButton 的值更新一个变量。经过一段时间的调试,我得出的结论是变量正在根据需要更新,但没有显示在反应渲染部分中,而是显示了函数的更新值。
我的代码是:
const [state, setState] = useState(false);
let btnValue;
function changeValue(value)
{
console.log("Value: " + value)
btnValue = value;
setState(value);
console.log("Button Value at function: " + btnValue)
}
return (
<div className="App">
<BootstrapSwitchButton checked={true} onlabel="On" offlabel="Off" width={100} onChange={changeValue}/>
{console.log("Button Value: " + btnValue)}
</div>
);
}
我只想知道这里发生了什么?为什么即使状态发生变化,React 也不会显示更新的值?
您不应在组件上下文中使用局部变量,因为它们不在状态生命周期内。 React 不知道这个变量,因此不会“跟踪”它。使用 state
而不是 btnValue
,因为这样 React 将处理与组件更改相关的任何操作。您可以在 React state and lifecycle page.
中阅读更多相关信息
function changeValue(value)
{
console.log("Value: " + value)
setState(value);
console.log("Button Value at function: " + value)
}
return (
<div className="App">
<BootstrapSwitchButton checked={true} onlabel="On" offlabel="Off" width={100} onChange={changeValue}/>
{console.log("Button Value: " + state)}
</div>
);
我正在尝试使用 ReactJS 并遇到了一个问题。我只想根据 BootstrapSwitchButton 的值更新一个变量。经过一段时间的调试,我得出的结论是变量正在根据需要更新,但没有显示在反应渲染部分中,而是显示了函数的更新值。 我的代码是:
const [state, setState] = useState(false);
let btnValue;
function changeValue(value)
{
console.log("Value: " + value)
btnValue = value;
setState(value);
console.log("Button Value at function: " + btnValue)
}
return (
<div className="App">
<BootstrapSwitchButton checked={true} onlabel="On" offlabel="Off" width={100} onChange={changeValue}/>
{console.log("Button Value: " + btnValue)}
</div>
);
}
我只想知道这里发生了什么?为什么即使状态发生变化,React 也不会显示更新的值?
您不应在组件上下文中使用局部变量,因为它们不在状态生命周期内。 React 不知道这个变量,因此不会“跟踪”它。使用 state
而不是 btnValue
,因为这样 React 将处理与组件更改相关的任何操作。您可以在 React state and lifecycle page.
function changeValue(value)
{
console.log("Value: " + value)
setState(value);
console.log("Button Value at function: " + value)
}
return (
<div className="App">
<BootstrapSwitchButton checked={true} onlabel="On" offlabel="Off" width={100} onChange={changeValue}/>
{console.log("Button Value: " + state)}
</div>
);