reactjs - Type InferableComponentEnhancerWithProps saknar följande egenskaper från typ Component<OwnProps>
Jag följer den här handledningen för att bygga en chattapp med React och Redux på Typescript, men jag får ett fel när jag exporterar min anslutna komponent:
Type 'InferableComponentEnhancerWithProps<ConnectedState & ConnectedDispatch, OwnProps>'
is missing the following properties from type 'Component<OwnProps, {}, any>':
context, setState, forceUpdate, render, and 3 more.
Detta är koden från handledningen. På vilket sätt bör jag uppdatera den för att bli av med detta fel och kunna använda komponenten normalt.
import * as React from 'react'
import * as redux from 'redux'
import { connect } from 'react-redux'
import { Message as MessageModel, UserMessage} from 'rcserver/src/models'
import { ChatState } from '../state'
import { Action } from '../actions'
import { Messages } from './Messages'
import { ChatInput } from './ChatInput'
interface OwnProps {
socket: WebSocket,
username: string
}
interface ConnectedState {
messages: MessageModel[]
}
interface ConnectedDispatch {}
interface OwnProps {}
const mapStateToProps = (state: ChatState, ownProps: OwnProps): ConnectedState => ({
messages: state.messages
})
const mapDispatchToProps = (dispatch: redux.Dispatch<Action>): ConnectedDispatch => ({})
export class ChatAppComponent extends React.Component<ConnectedState & ConnectedDispatch & OwnProps> {
sendHandler = (message: string) => {
const messageObject: MessageModel = {
name: this.props.username,
message: message
}
this.props.socket.send(JSON.stringify(messageObject))
}
render() {
return (
<div className="container">
<h3>React Chat App</h3>
<Messages username={this.props.username} messages={this.props.messages} />
<ChatInput onSend={this.sendHandler} />
</div>
)
}
}
export const ChatApp: React.Component<OwnProps> = connect(mapStateToProps, mapDispatchToProps)
//This last line is the one triggering the error
Svar #1
Det är nästan korrekt, men du glömde att använda connect(mapStateToProps, mapDispatchToProps) på din ChatAppComponent. Detta borde fungera:
export const ChatApp = connect(mapStateToProps, mapDispatchToProps)(ChatAppComponent)
Typen av ChatApp kommer att härledas korrekt, så du behöver inte en typsignatur. Om du vill ha signaturen, kommer du dock att behöva React.FunctionComponent<OwnProps>, eftersom den anslutna komponenten inte är en klass. Alternativt kan du också använda den mer generella React.ComponentType<OwnProps> som fungerar för både klasser och funktionskomponenter.
