Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 重复操作不存在_Javascript_React Native_Redux_React Redux - Fatal编程技术网

Javascript 重复操作不存在

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) =>

我已根据doc redux样板文件正确设置。 我有一个包含各种操作文件的文件夹,其中包含操作。 在这个文件夹中,我创建了一个
index.js
,在这里我将导出所有这些文件。我将其作为命名导出导入。 当我控制台记录函数本身时,它就在那里,但当我控制台注销时,
this.props
它就不存在了。 我已尝试在类its
undefined
之外控制台注销函数

如果我直接从文件中导入操作,则该操作将在文件中定义

动作/动作.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需要手动操作呢?