gpt4 book ai didi

reactjs - React Redux 在 Modal 中的使用

转载 作者:行者123 更新时间:2023-12-03 03:26:57 29 4
gpt4 key购买 nike

我正在 React 中学习 Redux。我在 React 中使用 Redux 进行 Modal 开发。我的代码如下

render() {
return (
<Modal id="addressModal" open={this.props.controlModal} onClose={this.props.action}>
<Provider store={store}>
{this.props.addresObj ? (
<Modal.Header>Address Details</Modal.Header>
) : (
<Modal.Header>Insert Address</Modal.Header>
)}
<Modal.Content>
<ModalElement
update={this.update}
element={this.props.addresObj}
errors = {this.state.errors}
update_state_photo={this.update_state_photo}
address={this.props.address}
action={this.props.action}
/>
</Modal.Content>

<Modal.Actions>
{this.props.addresObj ? (
<Button
positive
icon="checkmark"
labelPosition="right"
onClick={this.closeModal}
content="OK"
/>
) : (
<Button
positive
icon="checkmark"
labelPosition="right"
onClick={this.insertAddress}
content="Save"
/>
)}
</Modal.Actions>
</Provider>
</Modal>
);
}
}

(我是否正确使用了 <Provider store={store}> ?)在子组件中,我无法使用 Redux 语法。就像我使用这个 export default connect()(EditableRow);我收到错误(组件执行未在该组件处完成,执行转发)。如果我使用这个语法 export default EditableRow;我没有收到任何错误。

可能是我无法正确表达我的问题。

这是我的仓库 https://github.com/afoysal/mern/blob/master/client/src/components/ModalBody.js

我遇到以下错误。

enter image description here

如何在 React Modal 中使用 Redux?

最佳答案

这里的问题是由于使用 React portals 引起的

Portals provide a first-class way to render children into a DOM node that exists outside the DOM hierarchy of the parent component.

Portal 允许在另一个 DOM 下渲染 React 元素。经过简化,这看起来像

const ComponentA = ReactDOM.createPortal(
<CoolComponent />,
document.getElementById('banner'),
)

const ComponentB = ReactDOM.createPortal(
<SuperCoolComponent />,
document.getElementById('footer'),
)

总的来说 ComponentA不会看到ProviderComponentB .

你可以看看这个page ,但是它并没有完全描述您遇到的问题。

如果查看<Modal>组件源,它使用 React.createPortal 渲染自身并失去父级的提供者。

我看到的一个解决方法

  1. 摘录store来自合作伙伴的<Provider/>
  2. 创建新的 <Provider>就在<Modal>之后用法。

    // ModelBody.js
    import { Provider, ReactReduxContext } from 'react-redux';

    //...
    render() {
    return (
    <ReactReduxContext.Consumer>
    {((ctx) => (
    <Modal id="addressModal" open={this.props.controlModal} onClose={this.props.action}>
    <Provider store={ctx.store}> /* make store available in Portal */
    {this.props.addresObj ? (
    <Modal.Header>Address Details</Modal.Header>
    ) : (
    <Modal.Header>Insert Address</Modal.Header>
    )}
    /* other code from Model.js */
    </Provider>
    </Modal>
    )).bind(this) // Dont forget to bind this
    }
    </ReactReduxContext.Consumer>

关于reactjs - React Redux 在 Modal 中的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56259508/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com