微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法将ReactJS项目转换为React-Redux

如何解决无法将ReactJS项目转换为React-Redux

我是 React-Redux 的新手,我创建了一个ReactJS项目,并且试图将我的项目转换为React-Redux。我不知道怎么可能。

如果有人有任何想法,请建议我。

这是我的项目代码

import React,{ Component } from 'react';
import './accordion.css';

class Accordion extends Component {
    state = { active: '',height: '0px' };

    content = React.createRef();

    toggleAccordion = () => {
        this.setState({
            active: this.state.active === '' ? "active" : "non-active",height: this.state.active === 'active' ? "0px" : `${this.content.current.scrollHeight}px`,})
        console.log(this.content)
    }
    render() {
        return(
            <div>
                <button className={`accordion ${this.state.active}`} onClick={this.toggleAccordion}>
                    {this.props.title}
                </button>
                <div className="panel" ref={this.content} style={{maxHeight: `${this.state.height}`}}>
                    {this.props.content}
                </div>
            </div> 
        );
    }
}
export default Accordion;

这是我的沙箱

https://codesandbox.io/s/crazy-cache-1xg32?file=/src/App.js

解决方法

the code you posted有几个问题。

  1. 对于处理程序,您需要传递一个函数而不是调用它。在您的<Accordion>上,您具有:
toggleAccordion={this.props.setActive(
  this.props.active.toggle === "" ? "active" : "non-active"
)}

哪个调用了渲染功能,但实际上只希望在切换时调用该函数:

toggleAccordion={() => this.props.setActive(
  this.props.active.toggle === "" ? "active" : "non-active"
)}
  1. 引用不能作为prop传递给组件。您需要使用React库提供的forwardRef函数。

  2. 不知道这是怎么回事,但看起来setHeight实际上不是App组件中的道具吗?在mapDispatchToProps中,您只有setActive。最重要的是,为什么在这里尝试使用扩展运算符(...)?

{...this.props.setHeight(
  this.props.height.expand === "active"
    ? "0px"
    : `${this.content.current.scrollHeight}px`
)}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。