gpt4 book ai didi

javascript - 如何在 useState Hook 中将字符串转换为数字?

转载 作者:行者123 更新时间:2023-12-04 14:59:14 25 4
gpt4 key购买 nike

I am trying to convert data from a string to a number before it is inputted so that I can perform mathematical calculations on the data later.

I tried to use parseInt inside of my useState hook but I received the following error:ReferenceError: can't access lexical declaration 'score' before initialization

import React, { Fragment, useState } from 'react';
import { Link } from 'react-router-dom';
import PropTypes from 'prop-types';
import { connect } from 'react-redux';
import { addGame } from '../../actions/game';

const GameInput = ({ addGame }) => {
const [formData, setFormData] = useState({
score: parseInt(score, 10),
strikes: parseInt(strikes, 10),
spares: parseInt(spares, 10),
openFrames: parseInt(openFrames, 10),
});

// Destructure formData
const { score, strikes, spares, openFrames } = formData;

// Input Method to change state
const onChange = (e) =>
setFormData({ ...formData, [e.target.name]: e.target.value });

// onSubmit Form Method
const onSubmit = (e) => {
e.preventDefault();
addGame(formData);
};

return (
<Fragment>
<h1>Record Your Stats</h1>

<form onSubmit={(e) => onSubmit(e)}>
<div>
<input
type='text'
placeholder='Score'
name='score'
value={score}
onChange={(e) => onChange(e)}
/>
<small>Your score for this game</small>
</div>
<div>
<input
type='text'
placeholder='Stikes'
name='strikes'
value={strikes}
onChange={(e) => onChange(e)}
/>
<small># of Strikes hit this game</small>
</div>
<div>
<input
type='text'
placeholder='Spares'
name='spares'
value={spares}
onChange={(e) => onChange(e)}
/>
<small># of Spares hit this game</small>
</div>
<div>
<input
type='text'
placeholder='Open Frames'
name='openFrames'
value={openFrames}
onChange={(e) => onChange(e)}
/>
<small># of frames with pins left standing</small>
</div>

<input type='submit' />
<Link className='btn btn-light my-1' to='/profile'>
Back to Profile
</Link>
</form>
</Fragment>
);
};

GameInput.propTypes = {
addGame: PropTypes.func.isRequired,
};

export default connect(null, { addGame })(GameInput);

最佳答案

状态尚未定义,因此无法访问。您正在设置初始状态,因此只需使用您想要的类型声明它即可。 scorestrikessparesopenFrames 尚未声明或定义,因此它们不能被使用。

似乎您真的想在更新状态时将输入字符串解析回数字类型。为了保持您的状态不变,您可以/应该在您的 onChange 处理程序中执行此转换。

// Input Method to change state
const onChange = (e) => {
const { name, value } = e.target;
setFormData({ ...formData, [name]: parseInt(value, 10) }); // Or Number(value)
};

提供有效的初始状态。

const [formData, setFormData] = useState({
score: 0,
strikes: 0,
spares: 0,
openFrames: 0,
});

关于javascript - 如何在 useState Hook 中将字符串转换为数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67271684/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com