reactjs - 试图通过道具将点击处理程序传递给阿波罗查询
问题描述
我正在尝试通过此类的道具传递点击处理程序
class App extends Component {
handleToggle = (todo:any) => () => {
// update todo
console.log("I WORK!");
};
render() {
return (
<div className="App">
<Todos onTodoClick={this.handleToggle}/>
</div>
);
}
}
到这个包含 a 的函数Query
:
function Todos(props: any) {
return (
<Query query={GET_TODOS}>
{({ loading, error, data }) => {
if (loading) return "Loading...";
if (error) return `Error! ${error.message}`;
return (
<div>
<List>
{data.todos.map((todo: any) => (
<ListItem
key={todo.id}
onClick={() => props.onTodoClick(todo)} // HERE
>
<ListItemText primary={todo.text} />
</ListItem>
))}
</List>
</div>
);
}}
</Query>
);
}
但是,无论我是创建Todo
一个函数还是只是一个 const,props click 处理程序都不会被调用。我希望看到“我工作!” 在控制台中,但它没有发生。当接收函数包含 Apollo 查询时,任何想法如何通过道具传递点击处理程序?
解决方案
啊,我傻了。我写的handleToggle
很烂。应该是:
handleToggle = (todo:any) => {
// update todo
console.log("I WORK!");
};
在里面,App
调用Todos
<Todos onTodoClick={()=>this.handleToggle}/>
推荐阅读
- xamarin.android - 立即运行的定期工作请求 - Xamarin
- angular - 角度地图不检索数据
- vscode-debugger - 使用 VSCode Chrome 扩展在端口 8001 和节点服务器端口 3000 上调试 React 客户端
- php - Twig:将 Twig 标记传递给包含
- asp.net-mvc - 当我尝试新操作时,ASP.Net mvc 应用程序总是将我重定向到登录页面,即使我已登录
- python - 如何轻松计算数组中相邻元素的增量
- java - 访问嵌套在两个 JSONArrays 中的 JSONObject
- node.js - Reactjs with useEffect中的eslint问题,这种情况下怎么不用放 // eslint-disable-line
- javascript - javascript中的升序/降序数组项
- c++ - 是否可以在vs2010中编译fmt