Я новичок в машинописи и действительно изо всех сил.Я не могу понять, где начать и где закончить.Да, в интернете есть много ресурсов, но мне не удалось получить эту информацию и использовать в моем проекте.Надеюсь встретить некоторую помощь здесь.Я также провел некоторую проверку типов, и если вы найдете что-то, что я мог бы сделать лучше, просто скажите мне, чтобы улучшить его.Так что теперь я борюсь с редуксом mapStateToProps
и mapDispatchToProps
.Я перепробовал много вариантов, но каждый раз у меня появляются какие-то ошибки.Я опубликую свой код, который представляет мой компонент панели мониторинга, который связан с состоянием.
import * as React from 'react';
import { connect } from 'react-redux';
import SearchIcon from '../SvgIcons';
import MapComponent from '../Map';
import { getEventInfo, getUserInfo } from '../../actions';
interface StateProps {
userReducer: {
accessToken: string
},
eventReducer: {
events: object[]
}
}
interface DispatchProps {
dispatchUserInfo: () => void;
dispatchEventInfo: (accessToken: string, query: string) => void;
}
interface OwnProps {
onSubmit: (e: React.FormEvent<HTMLFormElement>) => void,
accessToken: string,
events: object[]
}
type Props = StateProps & DispatchProps & OwnProps;
class DashboardPage extends React.Component<Props, {}> {
componentDidMount() {
const { dispatchUserInfo } = this.props;
dispatchUserInfo();
}
handleEventSearch = e => {
e.preventDefault();
const { dispatchEventInfo, accessToken } = this.props;
const query: string = e.target.children[0].value;
dispatchEventInfo(accessToken, query);
}
render() {
const { events } = this.props;
return (
<div className="dashboard-container">
<div className="search-event">
<form className="search-event__form" onSubmit={this.handleEventSearch}>
<input
autoComplete="off"
type="text"
name="search-event"
placeholder="Search an event"
className="search-event__input"
aria-label="Enter search text"
/>
<button type="submit" className="search-event__button">
<SearchIcon />
Search
</button>
</form>
<p className="sign-out">
<a href="/api/logout" className="btn btn--sign-out sign-out__button">Sign out</a>
</p>
</div>
<div className="google-map">
<MapComponent events={events} />
</div>
</div>
);
}
}
const mapStateToProps = (state: StateProps) => {
const accessToken = state.userReducer.accessToken || '';
const events = state.eventReducer || [];
return {
accessToken,
events
};
};
const mapDispatchToProps = (dispatch: DispatchProps) => ({
dispatchEventInfo(query: string, token: string) {
dispatch(getEventInfo(query, token));
},
dispatchUserInfo() {
dispatch(getUserInfo());
}
});
export default connect(mapStateToProps, mapDispatchToProps)(DashboardPage);
Это ошибки машинописи
1) Refers to
handleEventSearch`method
[ts] Параметр 'e' неявно имеет тип 'any'.
2) ссылается на mapDispatchToProps
[ts] Невозможно вызвать выражение, тип которого не имеет подписи вызова.Тип «DispatchProps» не имеет совместимых подписей вызовов.
3) относится к mapDispatchToProps
в connect HOC
Аргумент типа '(отправка: DispatchProps) =>{dispatchEventInfo (query: string, token: string): void;dispatchUserInfo (): void;} 'нельзя назначить параметру типа' MapDispatchToPropsParam <{dispatchEventInfo (запрос: строка, токен: строка): void;dispatchUserInfo (): void;}, {}> '.
Type' (dispatch: DispatchProps) => {dispatchEventInfo (запрос: строка, токен: строка): void;dispatchUserInfo (): void;} 'нельзя назначить типу' MapDispatchToPropsFunction <{dispatchEventInfo (query: string, token: string): void;dispatchUserInfo (): void;}, {}> '.
Типы параметров dispatch и dispatch несовместимы.Тип «Dispatch>» нельзя назначить типу «DispatchProps».Свойство dispatchUserInfo отсутствует в типе «Dispatch>».
Также, если вы можете предоставить мне очень хорошие источники, чтобы узнать о реакции и избыточности с помощью машинописного текста, чтобы я мог легко написать свой код.