【问题标题】:Why is Firestore storing the number as a string?为什么 Firestore 将数字存储为字符串?
【发布时间】:2021-09-08 06:23:27
【问题描述】:

我有这个表格,我将在 Firestore 中提交它。我想将 counter 保存为数字而不是 Firestore 中的字符串。我已经将类型声明为“数字”,它仍然保存为字符串。

 const handleSubmit = (e) => {
    e.preventDefault();

    try {
      const userRef = firestore.collection("users").doc();
      const ref = userRef.set({
        ....,
        counter
      });
      console.log(" saved");
    } catch (err) {
      console.log(err);
    }
  };

    const [counter, setCounter] = useState(0);
   <Grid item>
            <TextField
              type="number"
              label="counter"
              fullWidth
              required
              value={counter}
              onChange={(e) => setCounter(e.target.value)}
            />
          </Grid>

【问题讨论】:

  • @Dai this - const [counter, setCounter] = useState(0);

标签: javascript reactjs firebase google-cloud-firestore


【解决方案1】:

输入总是字符串类型。

您可以在每次输入更改更新状态时转换为数字:

onChange={(e) => setCounter(Number(e.target.value))}

(正如@Dai 指出的valueAsNumber - HTMLInputElement

valueAsNumber

double:返回元素的值,解释为 以下,按顺序:

  • 时间价值
  • 一个数字
  • 如果无法转换,则为 NaN
onChange={(e) => setCounter(e.target.valueAsNumber)}

或者更新商店的时候转成数字:

const handleSubmit = (e) => {
  e.preventDefault();

  try {
    const userRef = firestore.collection("users").doc();
    const ref = userRef.set({
      ....,
      counter: Number(counter),
    });
    console.log(" saved");
  } catch (err) {
    console.log(err);
  }
};

【讨论】:

  • "输入总是字符串类型。" - 是的,但HTMLInputElement.value 始终是string,还有valueAsNumbervalueAsDate(当然取决于你的&lt;input type="" />`。
  • 请注意valueAsNumber 将是NaN 除非输入有&lt;input type="number" /&gt;
猜你喜欢
  • 2021-11-27
  • 2021-12-16
  • 1970-01-01
  • 2022-07-26
  • 1970-01-01
  • 2018-04-19
  • 1970-01-01
  • 2022-01-16
  • 1970-01-01
相关资源
最近更新 更多