Javascript 重复操作不存在
我已根据doc redux样板文件正确设置。 我有一个包含各种操作文件的文件夹,其中包含操作。 在这个文件夹中,我创建了一个Javascript 重复操作不存在,javascript,react-native,redux,react-redux,Javascript,React Native,Redux,React Redux,我已根据doc redux样板文件正确设置。 我有一个包含各种操作文件的文件夹,其中包含操作。 在这个文件夹中,我创建了一个index.js,在这里我将导出所有这些文件。我将其作为命名导出导入。 当我控制台记录函数本身时,它就在那里,但当我控制台注销时,this.props它就不存在了。 我已尝试在类itsundefined之外控制台注销函数 如果我直接从文件中导入操作,则该操作将在文件中定义 动作/动作.js export const formInput = (key, val) =>
index.js
,在这里我将导出所有这些文件。我将其作为命名导出导入。
当我控制台记录函数本身时,它就在那里,但当我控制台注销时,this.props
它就不存在了。
我已尝试在类itsundefined
之外控制台注销函数
如果我直接从文件中导入操作,则该操作将在文件中定义
动作/动作.js
export const formInput = (key, val) => (
{
type: FORM_INPUT,
payload: { key, val }
}
);
export * from './formActions';
import { formInput } from './actions'; // <-- this.props.formInput = undefined
操作/index.js
export const formInput = (key, val) => (
{
type: FORM_INPUT,
payload: { key, val }
}
);
export * from './formActions';
import { formInput } from './actions'; // <-- this.props.formInput = undefined
FormComp.js
export const formInput = (key, val) => (
{
type: FORM_INPUT,
payload: { key, val }
}
);
export * from './formActions';
import { formInput } from './actions'; // <-- this.props.formInput = undefined
edit1:如果我在componentWillMount()
console.log(formInput)//没有这个.props它就在那里了
edit2(解决方案?):
我能够通过bindActionCreators
将动作映射到道具。然而,我不明白为什么我需要使用bindActionCreators
,为什么我不能将connect作为第二个参数导出
const FormComp = connect(
({ forms }) => ({ forms }),
dispatch => bindActionCreators({ formInput }, dispatch)
)(InputField);
您需要返回一个函数,该函数的参数为dispatch
和getState
export const formInput = (key, val) => (dispatch, getState) => {
// maybe additional stuff
dispatch({
type: FORM_INPUT,
payload: { key, val }
});
};
参见文档中的标题动作创建者原因未定义此.props.formInput
,但定义了formInput
,是因为redux connect未针对组件props内的变量(属性)formInput
正确设置函数formInput
formInput
是您要导入的函数
this.props.formInput
是应该“指向”您导入的函数的属性
试试看(为了清楚起见,我已经分开了)
然后在代码中的任何地方调用
this.props.formInput(key, val);
这将通过道具调用动作,因此将发送。正确地您拼写错了动作格式?@TimH抱歉,我已更正了示例中的拼写。FormComp.js是否在同一动作目录中?也许可以尝试:从“../actions”导入{formInput},或者您可以共享您的文件树吗?@Ilario是的,它位于同一目录下。结构在两种情况下都是相同的,唯一的区别是导入字符串。好吧,你不是在分派!为什么OP需要这么做?他既不从动作创建者发送多个动作,也不使用当前存储。更不用说,他/她需要thunk中间件来处理这样一个动作创建者。@YuryTarabanko这只是一个简短的例子。我们讨论的是actions文件夹中的10多个文件,其中包含60多个action创建者。如果我从“/actions”导入操作,我可以注销整个结构。@eden我不太理解这里的区别。为什么在执行import{formInput}时需要向动作创建者添加分派从“/actions”
以及为什么直接从定义了action creator的文件导入时不需要包含dispatch?@parohy我实际上是在问eden,因为我认为他的解决方案不会有帮助。因为您将操作直接连接到组件,您需要创建自动分派的绑定操作创建者@YuryTarabanko你为什么不试试看这是否有效。如果connect
已经做了,为什么OP需要手动操作呢?