【发布时间】:2021-10-09 12:36:33
【问题描述】:
我只想在特定范围内动态更新源和目标的字体大小(这里的范围应该在 12 - 18 之间)。它正在工作,但更新/更改的值不会反映下一次函数调用。我知道我们可以使用 useEffect 挂钩来使其反映某些情况,但在这种情况下,我不确定 useEffect 挂钩是否有用
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>React JS</title>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/babel-standalone/6.26.0/babel.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.6/umd/react.development.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.6/umd/react-dom.development.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.1/moment.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/react-datetime/3.0.0/react-datetime.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/react-datetime/3.0.0/css/react-datetime.min.css" rel="stylesheet" type="text/css">
<link href="https://cdnjs.cloudflare.com/ajax/libs/uikit/3.2.0/css/uikit.min.css" rel="stylesheet" type="text/css">
</head>
<body>
<noscript>
You need to enable JavaScript to run this app.
</noscript>
<div id="root"></div>
<script type="text/babel">
const { useState } = React
const Editor = (props) => {
const [sourceLanguageFontSize, setSourceLanguageFontSize] = useState(15)
const [targetLanguageFontSize, setTargetLanguageFontSize] = useState(15)
const [allowedMinFontSize, allowedMaxFontSize] = [12, 18]
const changeFontSize = (stateVal, setFunction, action = '+') => {
console.log(parseInt(stateVal)) //Here it prints old value
if (parseInt(stateVal) >= allowedMinFontSize && parseInt(stateVal) <= allowedMaxFontSize) {
let currentFontSize = parseInt(stateVal)
if (action == '+')
setFunction(prevState => prevState + 1)
else if (action == '-')
setFunction(prevState => prevState - 1)
}
}
return(
<span onClick={e => changeFontSize(sourceLanguageFontSize, setSourceLanguageFontSize, '+') }>Increase Source</span>
)
}
ReactDOM.render(<Editor />,document.getElementById("root"))
</script>
</body>
</html>
【问题讨论】:
-
显然它会注销 current(或 old)状态值,因为这是您在 点击时传入的值我>:
changeFontSize(sourceLanguageFontSize, ...)。鉴于此,对于如此简单的任务,您的代码过于复杂?您是否考虑过简单地定义两个回调来增加和减少值?例如:const decrease = () => setSourceLanguageFontSize(current => current > allowedMinFontSize ? current - 1 : current); -
我只是让它变得简单。实际上它具有也将被更新的目标值。所以我在那个函数中使用了三个参数
-
我没关注,抱歉?!
-
好的,感谢您的宝贵时间
标签: javascript reactjs react-hooks use-effect react-functional-component