javascript - 如何使用新的 React Hooks 将函数作为道具传递
问题描述
我正在练习新的 React 钩子,我又提出了另一个问题,因为我在互联网上根本找不到这个。
我正在尝试将一个函数作为道具从一个函数组件传递给另一个函数组件。我正在使用 useState 挂钩管理状态。在基于类的组件中,您将使用this.props.addTodo(this.state)
我现在拥有的addTodo.addTodo(content)
. 这感觉有点hacky。难道没有更好的方法来做到这一点吗?请参阅下面的完整代码。
主应用组件
import React, { useState } from 'react';
import Todos from './Todos';
import AddTodo from './AddTodo';
function App() {
const [todos, setTodos ] = useState([
{id: 1, content: 'buy some milk'},
{id: 2, content: 'play mario kart'}
]);
const deleteTodo = (id) => {
const Todos = todos.filter(todo => {
return todo.id !== id
});
setTodos(Todos)
}
const addTodo = (todo) => {
console.log(todo) //Here I want to do something with the new todo value, which I got from the add todo component
}
return (
<div className="todo-app container">
<h1 className="center blue-text">Todo's</h1>
<Todos todos={todos} deleteTodo={deleteTodo} />
<AddTodo addTodo={addTodo} />
</div>
);
}
export default App;
添加待办事项的组件
import React, { useState } from 'react';
function AddTodo(addTodo) {
const [content, setContent] = useState('');
const handleChange = (e) => {
setContent(e.target.value);
}
const handleSubmit = (e) => {
e.preventDefault();
addTodo.addTodo(content);
}
return (
<div>
<form onSubmit={handleSubmit}>
<label>Add new todo</label>
<input type="text" onChange={handleChange}/>
</form>
</div>
)
}
export default AddTodo;
我对积极分享我的代码并以这种方式寻求帮助很陌生。因此,请让我知道是否需要有关此主题的更多信息!
此致
解决方案
破坏一个道具 obj
import React, { useState } from 'react';
function AddTodo({addTodo}) {
const [content, setContent] = useState('');
const handleChange = (e) => {
setContent(e.target.value);
}
const handleSubmit = (e) => {
e.preventDefault();
addTodo(content);
}
return (
<div>
<form onSubmit={handleSubmit}>
<label>Add new todo</label>
<input type="text" onChange={handleChange}/>
</form>
</div>
)
}
推荐阅读
- c++ - 如何在 WSL 上修复智能感知“无法找到符号的定义”
- javascript - Vue中的无效字符串长度RangeError仅在某些环境中
- verilog - 使线向量与一根线具有相同的值
- java - 如果将 Tomcat 网站从 http 移动到 https,我在哪里放置重定向
- ruby-on-rails - 设计中的预授权
- node.js - 如何通过 nodejs 清理和编辑 JSON 文件
- javascript - React App - TypeError:无法添加属性 setState,对象不可扩展
- python - TensorFlow 安装问题 Mac
- crystal-reports - 我无法获得水晶报表 if/then/else 公式来提取正确的数据
- java - ArrayList 复制数据的问题