Reactjs 未触发Redux操作

Reactjs 未触发Redux操作,reactjs,redux,Reactjs,Redux,我已经用Relay、Redux和GraphQL设置了一个应用程序。当我启动一个操作以显示下拉列表时,状态未更新(当我使用react-redux devtools分派该操作时,状态已更新) 我有以下行动: export function showDropdown() { return { type: SHOW_DROPDOWN, dropdownType: PROFILE_SETTINGS, dropdownProps: {} }

我已经用Relay、Redux和GraphQL设置了一个应用程序。当我启动一个操作以显示下拉列表时,状态未更新(当我使用react-redux devtools分派该操作时,状态已更新) 我有以下行动:

export function showDropdown() { 
  return {  
    type: SHOW_DROPDOWN,
    dropdownType: PROFILE_SETTINGS,
    dropdownProps: {}
  }                                                                                                              
 }
以及以下组件

import React from 'react';
import { connect } from 'react-redux';

import { showDropdown } from '../../redux/actions/dropdownActions';

function StreamWidget() {
  const onClickHandler = () => {
  this.props.showDropdown();
}

return (
  <div>
    <a
      href='#'
      role='button'
      onClick={ onClickHandler }
    />
  </div>
);
}
export default connect(null, { showDropdown })(StreamWidget);

道具作为参数传递给函数:

import React from 'react';
import { connect } from 'react-redux';

import { showDropdown } from '../../redux/actions/dropdownActions';

function StreamWidget(props) {
  const onClickHandler = () => props.showDropdown()

  return (
   <div>
    <a
      href='#'
      role='button'
      onClick={ onClickHandler }
    />
  </div>
  );
}
export default connect(null, { showDropdown })(StreamWidget);
从“React”导入React;
从'react redux'导入{connect};
从“../../redux/actions/dropdownActions”导入{showDropdown};
功能StreamWidget(道具){
const onClickHandler=()=>props.showDropdown()
返回(
);
}
导出默认连接(null,{showDropdown})(StreamWidget);

道具作为参数传递给函数:

import React from 'react';
import { connect } from 'react-redux';

import { showDropdown } from '../../redux/actions/dropdownActions';

function StreamWidget(props) {
  const onClickHandler = () => props.showDropdown()

  return (
   <div>
    <a
      href='#'
      role='button'
      onClick={ onClickHandler }
    />
  </div>
  );
}
export default connect(null, { showDropdown })(StreamWidget);
从“React”导入React;
从'react redux'导入{connect};
从“../../redux/actions/dropdownActions”导入{showDropdown};
功能StreamWidget(道具){
const onClickHandler=()=>props.showDropdown()
返回(
);
}
导出默认连接(null,{showDropdown})(StreamWidget);

您的函数不是组件的道具,因此您应该直接调用它,而不使用这个。道具(showDropDown())

此外,您还存在“标记为必需”的错误,因为您必须在propTypes中根据需要定义React属性,因此您应该删除相关行


为了启动一个动作,你应该调度它,要这样做,你需要访问这个函数。这可以通过mapDispatchToProps函数和connect来完成。

您的函数不是组件的道具,因此您应该直接调用它,而不使用这个。道具(showDropDown())

此外,您还存在“标记为必需”的错误,因为您必须在propTypes中根据需要定义React属性,因此您应该删除相关行


为了启动一个动作,你应该调度它,要这样做,你需要访问这个函数。这可以通过mapDispatchToProps功能和connect来完成。

谢谢,但是即使在这些更改之后,它仍然不会更新状态。我已将问题编辑为包含index.js。因为我还收到一个错误,上面写着
警告:失败的道具类型:道具
children`在
App
中被标记为必需,但其值是
未定义的
。在应用程序中`。可能是存储有问题。@MaryCahill您是否在主
组件中定义了任何
propTypes
?我将子节点作为必需的节点。在所讨论的组件中,我有
showDropdown
所需的功能。后者没有抱怨-我相信这意味着函数已经定义了..谢谢,但即使在这些更改之后,它仍然不会更新状态。我已将问题编辑为包含index.js。因为我还收到一个错误,上面写着
警告:失败的道具类型:道具
children`在
App
中被标记为必需,但其值是
未定义的
。在应用程序中`。可能是存储有问题。@MaryCahill您是否在主
组件中定义了任何
propTypes
?我将子节点作为必需的节点。在所讨论的组件中,我有
showDropdown
所需的功能。后者并不抱怨——我相信这意味着函数已经定义了……当我在组件中这样做时constOnClickHandler=()=>props.openDropDown()`并定义
constMapDispatchToprops=(dispatch)=>({OpenDropDown:()=>{dispatch({type:'SHOW_DROPDOWN',dropdownType:'PROFILE_SETTINGS',dropdownProps:{}}});导出默认连接(null,mapDispatchToProps)(StreamWidget)
我仍然无法看到正在启动的操作。我认为由于某些原因,connect没有正确地发送showDropdown的值。在您的组件中,不要忘记通过this.props而不仅仅是props调用您的方法。您是否看到在单击按钮时调用函数?当我在组件中执行此操作时constOnClickHandler=()=>props.openDropDown()`并定义
constMapDispatchToprops=(dispatch)=>({OpenDropDown:()=>{dispatch({type:'SHOW_DROPDOWN',dropdownType:'PROFILE_SETTINGS',dropdownProps:{}}});导出默认连接(null,mapDispatchToProps)(StreamWidget)
我仍然无法看到正在启动的操作。我认为由于某些原因,connect没有正确地发送showDropdown的值。在您的组件中,不要忘记通过this.props而不仅仅是props调用您的方法。您是否看到在单击按钮时调用该函数?