【问题标题】:Can't type in react input field无法输入反应输入字段
【发布时间】:2021-10-17 09:56:23
【问题描述】:

我有一个简单的表单,其中包含我无法输入的输入字段。我首先认为问题在于将输入设置为只读的onChangevalue 道具,但事实是我无法输入浏览器建议并且状态更新完美(See gif here)就是这样即使重新加载页面,我也不会让我用键盘打字。

我还有一个登录页面可以正常工作,除非我注销并重定向回该页面,在我重新加载页面之前它不会工作,现在它可以工作了。

<input
value={name}
onChange={handleChange}
name="name"
/>
const [name, setName] = useState("");

const handleChange = (e:any) => {
    setName(e.target.value);
}

奇怪的是它处于只读状态,但是当我使用浏览器建议时,它可以工作并更新状态。

这是整个组件:

import React, { useEffect, useState } from 'react';
import { useForm } from '../../utils/useForm';

import { CubeType } from '../../interfaces';

//import useStore from '../store/Store';

import { Modal, Button, Row, Col, FormGroup, FormLabel, FormControl } from 'react-bootstrap';

type Props = {
    show: Boolean,
    onClose: () => void,
    cubeTypes: CubeType[]
};

const ModalTimelist = (props: Props) => {
    //const store = useStore();
    const [values, handleChangee] = useForm({ cubeType: 1, name: '' });


    const [name, setName] = useState("");

    const handleChange = (e:any) => {
        setName(e.target.value);
    }

    useEffect(() => {
        const modal = document.getElementsByClassName('modal')[0];
        if(modal) modal.removeAttribute('tabindex');
    }, [props.show]);

    return (
        <>
            <Modal show={props.show} onHide={ props.onClose }>
                <Modal.Header>
                    <Modal.Title>Timelist { name }</Modal.Title>
                </Modal.Header>
                <Modal.Body>
                    <Row>
                        <Col md="3">
                            <FormGroup>
                                <FormLabel>Cube Type</FormLabel>
                                <select
                                    value={values.cubeType}
                                    onChange={ handleChangee }
                                    className="form-select"
                                    name="cubeType"
                                >
                                    {props.cubeTypes.map((it, idx) => {
                                        return (<option value={ idx } key={"cube"+idx}>{it.name}</option>);
                                    }) }
                                </select>
                            </FormGroup>
                        </Col>
                        <Col md="9">
                            <FormGroup>
                                <FormLabel>Name</FormLabel>
                                <FormControl
                                    value={name}
                                    onChange={handleChange}
                                    name="name"
                                />
                            </FormGroup>
                        </Col>
                    </Row>
                </Modal.Body>
                <Modal.Footer>
                    <Button variant="success" onClick={() => props.onClose()}>
                        Save
                    </Button>
                    <Button variant="outline-danger" onClick={() => props.onClose()}>
                        Cancel
                    </Button>
                </Modal.Footer>
            </Modal>
        </>
    );
}

export default ModalTimelist;

【问题讨论】:

  • 你可以为 handleChange 添加你的代码吗?
  • 您将需要发布 handleChange 以及如何存储状态
  • 他们破解了控制台
  • 是的,检查了控制台,没有错误
  • 你有没有检查过改变事件是否被触发或不使用控制台有时它发生在 react-bootstrap 模式

标签: reactjs typescript next.js next-router


【解决方案1】:

输入的值必须是状态值,否则使用此代码不会改变

const App = () => {
   const [name,setName] = useState("")
   const handle = ({target:{value}}) => setName(value)
   return <input
     value={name}
     onChange={handle}
      name="name"
    />
}

【讨论】:

  • 对不起,我确实像你一样拥有它,只是忘了编辑。我有你发布的相同但不工作。无论如何谢谢:)
  • 你能把整个组件贴出来吗
  • 刚刚做到了!谢谢
【解决方案2】:

我尝试了代码,它工作正常,我认为你应该更换浏览器

如果你愿意

改变这个

const ModalTimelist = (props: Props) => {

const ModalTimelist:React.FC<Props> = (props) => {

【讨论】:

  • 用不同的浏览器试过了,还是不行。在较旧的分支上尝试过,它可以正常工作......我只需要调查我猜的更改。
  • 可能是您用于ui的库的问题,如果您使用alpha版本,请将其更改为稳定版本
【解决方案3】:

使用去抖动来设置状态名称。

例子:

const handleChange = (e:any) => {
    debounce(() => { setName(e.target.value) }, 300);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-27
    • 2021-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多