当前位置: 首页 > 知识库问答 >
问题:

通过react-redux调度组件

慎芷阳
2023-03-14

我想通过Redux传递一个组件并在另一个组件中显示它。我在做这样的事情:

ComponentToDispatch.js

const ComponentToDispatch = (props) => {
    return (<div>Propagate me {props.anthem}</div> {/* props.anthem = undefined, unlike what I expect.*/}
);
};
export {ComponentToDispatch};
 // code above
`import {ComponentToDispatch} from "./ComponentToDispatch";
 import {showComponentAction} from "./actions";
 const BruitEvent =()=>{
    const dispatch = useDispatch();
    return (<button onClick={(evt)=>dispatch(showComponentAction(ComponentToDispatch)}>
 Click to dispatch</button>);
 };`
 `
 export function ShowComponentAction(Component) {

 return {
    type: SHOW_ACTION,
    payload: {
      component: <Component />,
  },
 };
}`
const DispayComponent = () =>{
const { component} = useSelector((state) => {
if (state.testDisplay) {
  return {
    component: state.testDisplay.component,
  };
}
   return { component: null };
 });

useInjectReducer({ key: "testDisplay", reducer });

   return (<div>{component}</div>);
 }
 export {DisplayComponent};

共有1个答案

柴良哲
2023-03-14

您需要在分派组件之前实例化并封装道具,或者在分派的动作中传递未实例化的组件和道具对象,并将道具传递给接收端的组件。我建议后者,发送组件和道具在行动。

const BruitEvent =()=>{
  const dispatch = useDispatch();
  return (
    <button
      onClick={(evt) => dispatch(
        showComponentAction(ComponentToDispatch, /* some possible props object */)
      )}
    >
      Click to dispatch
    </button>
  );
};

...

export function ShowComponentAction(Component, props = {}) {
  return {
    type: SHOW_ACTION,
    payload: { Component, props }, // <-- assumes reducer places in state.testDisplay
  },
};

...

const DispayComponent = () =>{
  const { Component, prop } = useSelector((state) => state.testDisplay);

  useInjectReducer({ key: "testDisplay", reducer });

  return Component ? <div><Component {...props} /></div> : null;
}
 类似资料:
  • 我正在使用React Redux进行我的第一个项目,当我尝试在componentDidMount部分中分派函数时,遇到了一些问题。我试图在文档中遵循Reddit API示例项目,但由于它们使用JavaScript,我使用的是TypeScript,所以并非所有内容都是一样的。 这是我试图实现这一点的React组件: 我在行中收到以下错误: 如果存在任何不确定性,可在此处找到该项目:https://g

  • 我有这些文件,不知怎么的,当我分派一些东西时,它总是返回reducer的默认大小写。 这是我第一次使用Redux/Thunk,我正在学习本教程:https://www.youtube.com/watch?v=nrg7zhgjd4w,当他使用它时,它起作用了。 请看一下我的代码: 反应组分: 操作文件: 减速器: 和我的商店: 从“redux”导入{applyMiddleware,createSto

  • 问题内容: 在redux中,当调度一个动作时,reducer将相应地更改状态,调用该动作的组件也可以访问该状态(由Provider通过props传递)。我对吗? 状态是访问组件中操作结果的唯一方法吗?(已调用操作的组件)。 如何将回调函数传递给操作,然后使用该方法将结果发送回组件? 问题答案: 在redux中,当调度一个动作时,reducer将相应地更改状态,调用该动作的组件也可以访问该状态(由P

  • 我试图结合反应路由器v4,反应,和redux。因为react-router跟踪URL,所以我选择将该状态块排除在redux模型之外。 但我仍然需要一种方法来在react路由器发生路由更改时调度redux操作。哪里是最好的地方? 我的第一次尝试是将它放在react路由器链接的onClick属性中: 其思想是,当用户单击链接时,dispatchAction()将更新redux状态,然后加载相册组件。

  • 无法访问Class组件中的还原存储当前状态。 显示控制台错误 函数作为React子函数无效。如果返回组件而不是从渲染返回组件,则可能会发生这种情况。或者你想调用这个函数而不是返回它。 当我尝试使用带有 useSelector 和 useDispatch 的函数组件来实现相同的方法时,一切都按预期工作。这到底是怎么回事? reducer.js action.js 商店. js 类别组件 应用内。js

  • 目录 为何组件没有被重新渲染、或者 mapStateToProps 没有运行? 为何组件频繁的重新渲染? 怎样使 mapStateToProps 执行更快? 为何不在被连接的组件中使用 this.props.dispatch ? 应该只连接到顶层组件吗,或者可以在组件树中连接到不同组件吗? React Redux 为何组件没有被重新渲染、或者 mapStateToProps 没有运行? 目前来看,