Javascript 如何在React JS中通过用户输入输入文本

Javascript 如何在React JS中通过用户输入输入文本,javascript,reactjs,Javascript,Reactjs,我试图让用户为我的TODO应用程序输入数据,而不是从预定义的数组中提取数据 下面是我的父组件 import React from "react" import TodoItem from "./TodoItem" import todosData from "./todosData" class App extends React.Component { constructor() { super() this.state = {

我试图让用户为我的TODO应用程序输入数据,而不是从预定义的数组中提取数据

下面是我的父组件

import React from "react"
import TodoItem from "./TodoItem"
import todosData from "./todosData"

class App extends React.Component {
    constructor() {
        super()
        this.state = {
            name: "",
            todos: todosData
        }
        this.handleChange = this.handleChange.bind(this)
        this.nameEnter = this.nameEnter.bind(this)
    }

    handleChange(id) {
        this.setState(prevState => {
            const updatedTodos = prevState.todos.map(item => {
                if (item.id === id){
                    return {
                         ...item,
                         completed: !item.completed
                    }
                }
                    return item
            })
            return {
                todos: updatedTodos
            }
        })

    }
    nameEnter(){
        var name = this.name
        console.log(name)
        }

    render() {
        const todoItems = this.state.todos.map(item => <TodoItem key={item.id} item={item}
        handleChange = {this.handleChange} nameEnter= {this.nameEnter}/>)

        return (
            <div className="todo-list">
                {todoItems}
            </div>
        )    
    }
}
export default App   
从“React”导入React
从“/TodoItem”导入TodoItem
从“/todosData”导入todosData
类应用程序扩展了React.Component{
构造函数(){
超级()
此.state={
姓名:“,
todos:todosData
}
this.handleChange=this.handleChange.bind(this)
this.namenter=this.namenter.bind(this)
}
手柄更换(id){
this.setState(prevState=>{
const updatedTodos=prevState.todos.map(项=>{
如果(item.id==id){
返回{
…项目,
已完成:!item.completed
}
}
退货项目
})
返回{
待办事项:更新的待办事项
}
})
}
namenter(){
var name=this.name
console.log(名称)
}
render(){
const todoItems=this.state.todos.map(item=>)
返回(
{todoItems}
)    
}
}
导出默认应用程序
这是我添加了输入字段的子组件

import React from "react"
function TodoItem(props) {

    return (
        <div className="todo-item">
            <input 
                type = "checkbox" 
                checked = {props.item.completed} 
                onChange = { () => props.handleChange(props.item.id) }    
            />
            <input type = "text" name= "name" />

            <p>{props.item.text}</p>
        </div>
    )
}

export default TodoItem
从“React”导入React
功能待办事项(道具){
返回(
props.handleChange(props.item.id)}
/>
{props.item.text}

) } 将默认值导出到doItem
这就是我的页面的外观。我希望用户输入文本,而不是预定义的文本
示例:“杂货店购物”
,它应该代替文本

从“React”导入React
类形式扩展了React.Component{
构造函数(){
超级()
此.state={
姓名:“
}
}
onChange=(e)=>{
这是我的国家({
[e.target.name]:e.target.value
}) 
}
render(){
const{name}=this.state
返回(
)    
}
}
导出默认表单
changeInputVal(ev,索引){
ev.persist();
const newArr=this.state.inputArrVal;
newArr[指数]=ev.target.value;
this.setState({inputArrVal:newArr,currentPage:1});
}
好的,就在这里

<input onChange={(e)=>handleChange(e)}/>


//react hooks
const [values,setValues] = useState({inputValue: 'predefined'});
handleChange = (e)=>{
setValues({...values,[e.target.name]: e.target.value})
}

//classes
handleChange = (e)=>{
this.setState({[e.target.name]:e.target.value});
}
handleChange(e)}/>
//反应钩
const[values,setValues]=useState({inputValue:'prefined'});
handleChange=(e)=>{
setValues({…values,[e.target.name]:e.target.value})
}
//班级
handleChange=(e)=>{
this.setState({[e.target.name]:e.target.value});
}

这是通用的,可以应用于多个输入,而不仅仅是一个

使用状态更新文本并订阅该更改。我已经更新了代码。请看一看。您应该在输入中使用
onChange={(事件)=>props.handleChange(事件,id)}
。这样,您的
handleChange
函数将通过
event.target.value
接收包含值的
event
对象,并通过第二个参数接收
id
。您可以传递onChange={(event)=>props.handleChange(event,props.item.id)}并使用handleChange=(event,id)=>{console.log(event.target.checked)}
<input onChange={(e)=>handleChange(e)}/>


//react hooks
const [values,setValues] = useState({inputValue: 'predefined'});
handleChange = (e)=>{
setValues({...values,[e.target.name]: e.target.value})
}

//classes
handleChange = (e)=>{
this.setState({[e.target.name]:e.target.value});
}