我爱上了TypeScript,直到我发现Redux-Form与React-Redux之间存在一些非常令人沮丧的不兼容性.
我的目标是reduxForm使用react-redux connect装饰器包装一个装饰组件- 这种模式在babel配置中一直对我有用,并且似乎遵循HOC方法.这是一个例子:
import * as React from 'react';
import { Dispatch } from 'redux';
import { connect } from 'react-redux';
import { reduxForm, Field, InjectedFormProps } from 'redux-form';
interface SampleFormData {
username: string;
}
interface SampleFormProps {
saveData: (data: SampleFormData) => void;
}
type AllSampleFormProps = SampleFormProps & InjectedFormProps<SampleFormData>;
const SampleForm: React.SFC<AllSampleFormProps> = (props) => (
<form onSubmit={props.handleSubmit(props.saveData)}>
<Field name="username" component="input" />
</form>
);
const DecoratedSampleForm = reduxForm<SampleFormData>({ form: "sampleForm" })(SampleForm);
export default …Run Code Online (Sandbox Code Playgroud) 首先,我对 TS、React 和 Redux 非常陌生,如果这是一个明显的问题,我很抱歉。
我正在尝试修改此示例以获取加载某些信息的表单。它正在使用redux-form。
我试图找出如何调用connect,并redux-form在组件的出口的同时。现在它看起来像这样:
class UserForm extends React.Component<IUserProps, void> { .. }
export default ReduxForm.reduxForm({
form: 'user',
fields: [
'userName',
'password',
'firstName',
'lastName',
'email'
],
validate: UserForm.validate,
})(UserForm);
Run Code Online (Sandbox Code Playgroud)
我在没有 TS 的情况下看到的示例如下所示:
class MyForm extends Component {}
MyForm = reduxForm(config)(MyForm)
MyForm = connect(mapStateToProps, mapDispatchToProps)(MyForm)
export default MyForm
Run Code Online (Sandbox Code Playgroud)
但是如果我尝试在 TS 中做同样的事情,我会收到 TS2300 错误:重复标识符。
我也尝试过使用@connect装饰器,但我无法让它工作(或在网上找到任何工作示例)。