javascript - For Loop 未按预期工作,乘以 10
问题描述
我是 JavaScript React 的新手。无法理解为什么这个非常简单的 For-Loop 不能按预期工作?我显然希望它能够控制台。记录 amountOfPeople 的值,但是当我将 amountOfPeople 更改为 2 时,由于某种原因它最多计数为 20。当我将其更改为 3、4、5 等时也是如此。它乘以我的 10。
这是我的App.js:
import React from "react"
import Main from "./components/Main"
function App() {
const [amountOfPeople, setAmountOfPeople] = React.useState(1)
function handleChange(event) {
const {name, value} = event.target
if (name === "amountOfPeople") {
setAmountOfPeople(value)
}
}
return (
<div>
<Main
amountOfPeople={amountOfPeople}
handleChange={handleChange}
/>
</div>
)
}
export default App
主.js
import React from "react"
import InitialForm from "./InitialForm"
function Main(props) {
return (
<InitialForm
amountOfPeople={props.amountOfPeople}
handleChange={props.handleChange}
/>
)
}
export default Main
InitialForm.js
import React from "react"
function InitialForm(props) {
for (let index = 1; index < (props.amountOfPeople+1); index++) {
console.log(index)
}
return (
<form>
<label>Amount of people:</label>
<select name="amountOfPeople" value={props.amountOfPeople} onChange={props.handleChange}>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
</select>
</form>
)
}
export default InitialForm
解决方案
下拉列表的value
是一个字符串,当您将事件向上冒泡时,它就amountOfPeople
变成了一个字符串。所以当你这样做时:
for (let index = 1; index < (props.amountOfPeople+1); index++) {
console.log(index)
}
假设您选择了2
然后代码变为
for (let index = 1; index < ("2"+1); index++) {
console.log(index)
}
"2" + 1
是“21”,但随后它被强制转换为一个数字 - 数字21
确保value
始终是一个数字,在它前面加上+
setAmountOfPeople(+value)
现场示例:
function App() {
const [amountOfPeople, setAmountOfPeople] = useState(1)
function handleChange(event) {
const {name, value} = event.target
if (name === "amountOfPeople") {
setAmountOfPeople(+value)
}
}
return (
<div>
<Main
amountOfPeople={amountOfPeople}
handleChange={handleChange}
/>
</div>
)
}
function Main(props) {
return (
<InitialForm
amountOfPeople={props.amountOfPeople}
handleChange={props.handleChange}
/>
)
}
function InitialForm(props) {
for (let index = 1; index < (props.amountOfPeople+1); index++) {
console.log(index)
}
return (
<form>
<label>Amount of people:</label>
<select name="amountOfPeople" value={props.amountOfPeople} onChange={props.handleChange}>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
</select>
</form>
)
}
ReactDOM.render(<App />, document.getElementById("root"))
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.13.0/umd/react.production.min.js" integrity="sha256-32Gmw5rBDXyMjg/73FgpukoTZdMrxuYW7tj8adbN8z4=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.13.0/umd/react-dom.production.min.js" integrity="sha256-bjQ42ac3EN0GqK40pC9gGi/YixvKyZ24qMP/9HiGW7w=" crossorigin="anonymous"></script>
<script>
var {
useReducer,
useEffect,
useState,
useRef,
useCallback
} = React
</script>
<div id="root"></div>
推荐阅读
- php - Laravel 查询 whereHas 和 whereIn
- enums - 将所有变体实现相同特征的枚举转换为 Rust 中的框?
- android - Firebase 通知是灰色的
- python - 按键值比对字典进行排序
- php - 为 WordPress 插件更改 PHP 模板后的 CSS 样式
- html - 单页html网站 - nginx 403 Forbidden
- ruby-on-rails - Stripe and Rails 5 - Stripe::InvalidRequestError: 没有这样的计划:starter
- python - 正则表达式仅提取字母数字单词
- c++ - C++ to_string 函数根据额外打印语句的存在为 float 和 int 转换提供不同的结果
- javascript - 调用 API 端点时的 setTimeout 不返回值