【发布时间】:2021-04-20 19:56:48
【问题描述】:
在我的 React 项目中,我的 App 组件出现以下错误。
Type '{}' is missing the following properties from type 'Pick<ClassAttributes<App> & RouteChildrenProps<{}, unknown> & { userData: UserDataType | undefined; userRightList: UserRightListType[] | undefined; userPermissionList: string[] | undefined; } & { ...; }, "ref" | ... 3 more ... | "key">': history, location, matchts(2739)
以下是我的 index.tsx 文件代码:
import React from 'react';
import ReactDOM from 'react-dom';
import { BrowserRouter } from 'react-router-dom';
import { Provider } from 'react-redux';
import App from './App';
import reportWebVitals from './reportWebVitals';
import reduxStore from './redux/store';
ReactDOM.render(
<Provider store={reduxStore.store}>
<BrowserRouter>
<App /> // getting the error here
</BrowserRouter>
</Provider>,
document.getElementById('root')
);
reportWebVitals();
以下是我的 App.tsx 文件代码:
import { Component, Fragment } from 'react';
import { connect } from 'react-redux';
import { RouteComponentProps } from 'react-router-dom';
import ErrorBoundary from './components/ErrorBoundary';
import { getUserByToken, getUserRights, setUserRights } from './redux/actions';
import { ReduxStateType } from './type-definitions';
import { isAuthenticated } from './utils/is-authenticated';
type StoreProps = ReturnType<typeof mapStateToProps>;
type DispatchProps = typeof mapDispatch;
type PropsType = RouteComponentProps & StoreProps & DispatchProps;
class App extends Component<PropsType, any> {
componentDidMount() {
const {
userData,
getUserByToken,
getUserRights,
userRightList,
} = this.props;
const isAuth = isAuthenticated(userData);
if (!userData?.username && isAuth) {
getUserByToken();
}
if (userRightList?.length === 0 && isAuth) {
getUserRights();
}
}
componentDidUpdate(prevProps: PropsType) {
const {
userData,
userRightList,
userPermissionList,
setUserRights,
} = this.props;
if (
userData &&
Object.keys(userData).length > 0 &&
userRightList &&
userRightList?.length > 0 &&
userPermissionList?.length === 0
) {
setUserRights();
}
}
render() {
return (
<Fragment>
<ErrorBoundary></ErrorBoundary>
</Fragment>
);
}
}
function mapStateToProps(state: ReduxStateType) {
return {
userData: state.auth?.userData,
userRightList: state.auth?.userRightList,
userPermissionList: state.shared?.userPermissionList,
};
}
const mapDispatch = {
getUserByToken,
getUserRights,
setUserRights,
};
export default connect<StoreProps, DispatchProps>(
mapStateToProps,
mapDispatch
)(App);
我在render 方法中的index.tsx 文件中遇到错误。我是 TypeScript 的新手。如果有人能告诉我哪里做错了,我将不胜感激。
【问题讨论】:
-
我假设是
PropType导致了这个问题。至于具体是什么,我早就忘记了如何在旧版本的 React 中使用 Typescript。 -
好的,但我没有遗漏任何类型定义。该组件没有
ownProps。只有RouteComponentProps和Redux道具
标签: reactjs typescript react-router