You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中带props的网格如何设置16-100的尺寸范围限制

问题根因

你的问题完全出在输入触发逻辑部分,有4个明显的逻辑漏洞:

  • prompt返回值是字符串类型,直接和数字做大小比较存在隐式类型转换风险,输入非数字内容时判断逻辑会完全失效
  • 边界判断逻辑错误:要求最小16、最大100,原判断写的是gridSize < 100 && gridSize > 16,直接把16、100两个合法边界值排除在外
  • 二次输入未做校验:else分支弹出提示后第二次获取用户输入,没有做任何范围校验就直接赋值,这就是超出范围的数值也能生效的核心原因
  • 变量重复声明:else分支内再次用const gridSize声明同名变量,属于语法不规范,容易引发作用域异常

网格组件的代码没有问题,不需要修改,只要替换输入触发逻辑的代码即可。

修复后代码

let gridSize = prompt("请输入网格尺寸");
// 循环校验,直到输入合法或用户主动取消
while (gridSize !== null) {
  // 把输入转成十进制整数,过滤非数字内容
  const sizeNum = parseInt(gridSize, 10);
  // 校验是否为有效数字且在合法区间内
  if (!isNaN(sizeNum) && sizeNum >= 16 && sizeNum <= 100) {
    setGridSize(sizeNum);
    const newPixelData = initPixelData(sizeNum, INIT_BG_COLOUR);
    break;
  } else {
    alert("请输入16-100之间的整数");
    gridSize = prompt("请输入网格尺寸");
  }
}

修改说明

  • 新增输入类型转换逻辑,避免字符串和数字比较的异常问题
  • 修正边界判断逻辑,包含16、100两个合法边界值
  • 用循环做持续校验,只要输入不符合要求就重复提示,不会直接生效
  • 兼容用户点击prompt取消按钮的场景,避免无意义报错
  • 删除重复的变量声明,规范作用域逻辑

内容的提问来源于stack exchange,提问作者Louyi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 07:15:04