javascript - 反应无效的钩子调用,但如何有无效的钩子调用
问题描述
我是 react-redux 的新手,我正在尝试使用参考构建一个待办事项应用程序,但我不断收到此错误:
错误:无效的挂钩调用。钩子只能在函数组件的主体内部调用。这可能由于以下原因之一而发生:
- 你可能有不匹配的 React 版本和渲染器(例如 React DOM)
- 您可能违反了 Hooks 规则
- 你可能在同一个应用程序中拥有多个 React 副本
这是错误代码:
4 | import App from "./App";
5 | import reportWebVitals from "./reportWebVitals";
6 |
> 7 | ReactDOM.render(
8 | <React.StrictMode>
9 | <App />
10 | </React.StrictMode>,
我不明白怎么会有错误?
这是我的一些文件:
应用程序.js
import React from 'react';
import './App.css';
import AddTodo from './components/addTodo'
import TodoList from './components/todoList'
import VisibilityFilter from './components/visibilityFilter'
import {Provider} from 'react-redux'
import store from './redux/store'
function App() {
return (
<Provider store={store}>
<div className="App">
<h1>TODO Managers</h1>
<AddTodo/>
<TodoList/>
<VisibilityFilter/>
</div>
</Provider>
);
}
export default App;
index.js
import React from "react";
import ReactDOM from "react-dom";
import "./index.css";
import App from "./App";
import reportWebVitals from "./reportWebVitals";
ReactDOM.render(
<React.StrictMode>
<App />
</React.StrictMode>,
document.getElementById("root")
);
reportWebVitals();
addTodo.js
import React, { useState } from "react";
import { connect } from "react-redux";
import { addTodo } from "../redux/actions";
function AddTodo({ addTodo }) {
const [input, setInput] = useState("");
const inputHandler = (e) => {
setInput(e.target.input);
};
const addHandler = () => {
setInput("");
addTodo(input);
};
return (
<>
<input
type="text"
onChange={inputHandler}
input={input}
placeholder="You text here"
/>
<button onClick={addHandler}>Add</button>
</>
);
}
export default connect(null, { addTodo })(AddTodo);
todoList.js
import React from 'react'
import { connect } from 'react-redux'
import * as _ from 'underscore'
import { FILTER_ALL, FILTER_COMPLETED } from '../redux/actionTypes'
import { toggleTodo } from '../redux/actions'
const Todo = ({ todo, id, toggleTodo }) => (
<li className={todo.completed ? 'completed' : ''} onClick={() => toggleTodo(id)}>{todo.text}</li>
)
function TodoList({ todos, toggleTodo }) {
return (
_.keys(todos).map((id) => (
<Todo key={id} id={id} toggleTodo={toggleTodo} todo={todos[id]} />
))
)
}
const mapState = (state) => {
if (state.visibilityFilter.activeFilter === FILTER_ALL) {
return { todos: state.todos.data }
} else if (state.visibilityFilter.activeFilter === FILTER_COMPLETED) {
return ({
todos: _.pick(state.todos.data, (todo) => todo.completed)
})
} else {
return ({
todos: _.pick(state.todos.data, (todo) => !todo.completed)
})
}
}
export default connect(mapState, { toggleTodo })(TodoList);
可见性过滤器.js
import React from 'react'
import { connect } from 'react-redux'
import { setFilter } from '../redux/actions'
import { Filters } from '../redux/actionTypes'
function VisibilityFilter({ activeFilter, setFilter }) {
return (
Filters.map((filter, i) => (
<button
className={filter === activeFilter ? 'active' : ''}
onClick={() => setFilter(filter)}
key={`filter-${i}`}>
{filter}
</button>
))
)
}
const mapState = (state) => ({ activeFilter: state.visibilityFilter.activeFilter })
export default connect(mapState, { setFilter })(VisibilityFilter)
包.json
{
"name": "todo",
"version": "0.1.0",
"private": true,
"dependencies": {
"@testing-library/jest-dom": "^5.14.1",
"@testing-library/react": "^11.2.7",
"@testing-library/user-event": "^12.8.3",
"react": "^17.0.2",
"react-dom": "^17.0.2",
"react-scripts": "4.0.3",
"underscore": "^1.13.1",
"web-vitals": "^1.1.2"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest"
]
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
}
解决方案
推荐阅读
- tensorflow - 如何在 Tensorflow Lite 上为 CoreML 委托设置填充类型以修复未设置“PoolingLayerBuilder (MEAN)_1”。
- api - 如何从 api 文件夹中获取 NextJS 中的 API
- android - 华为邮箱在逗号后剪切链接
- sql - 从 JSON 中提取深度嵌套的值
- regex - Ansible 正则表达式搜索未知转义字符
- pandas - 获取 tensorflow 段中最大值的 id
- c++ - 一个类能否在内部监控其成员函数的使用和参数
- swift - 仅当设备运行 iOS 10+ 时有条件地导入库/Pod (Firebase)
- python - 为什么我非常简单的添加不起作用
- amazon-s3 - 如何为 milvus v2.0.0 启用 s3 支持而不是 minio?