javascript - 单击自定义按钮组件时热隐藏组件

标签 javascript reactjs redux react-redux

我试图在单击"is"或“否”时隐藏组件。单击时我得到了正确的输出,但像 Popup 一样的组件保留在屏幕中,我无法将其删除。

这是我的组件

export default class MyPopUp extends React.Component {
  constructor(props) {
    super(props)
  }

  render() {
    let { username } = this.props

    return (
      <div className="modal-wrapper">
        <div className="modal">
          Some Text
          <br />
          <MyButton
            name={username}
            surname="pewlas"
            arguments={["yes"]}
          >
            [ Yes ]
          </PostCommandButton>{" "}
          <MyButton
            name={username}
            surname="pewlas"
            arguments={["no"]}
          >
            [ No ]
          </MyButton>{" "}
        </div>
      </div>
    )
  }
}

这是MyButton

import { connect } from "react-redux"
import button from "../../../common/components/Button"
import { myButton } from "../actions/myButton"

const MyButton = connect(
  undefined,
  (dispatch, { name, surname, arguments: args = [] }) => ({
    onClick: () => dispatch(button(name, username, args)),
  }),
)(Button)

export default MyButton

这是我的按钮

export const MY_BUTTON = "MY_BUTTON"
export const myButton = (name, surname, args) => ({
  type: MY_BUTTON,
  name,
  surname,
  arguments: args,
})

如何在单击"is"或“否”时隐藏 MyPopUp?我找不到将 PopUp 组件与 MyButton 中的 onClick 链接的方法,如何添加状态以便显示或不显示?

最佳答案

我将尝试帮助您重构一些代码。

首先,我看到您正在将 redux 与您的 Button 一起使用,要执行您想执行的操作,您有一些选择:

    const SURNAME = "pewlas"
export class MyPopUpComponent extends React.Component {
  state = { hidden: false }

  handleClick = value => {
    this.props.myButton(this.props.username, SURNAME, value) //the action creator
    this.setState({ hidden: true }) //**IMPORTANT**
  }

  render() {
    const { username } = this.props

    if (this.state.hidden) {
      return null
    }

    return (
      <div className="modal-wrapper">
        <div className="modal">
          Some Text
        <br />
          <button
            name={username}
            surname={SURNAME}
            onClick={() => this.handleClick("yes")}
          >
            [ Yes ]
        </button>{" "}
          <button
            name={username}
            surname={SURNAME}
            onClick={() => this.handleClick("no")}
          >
            [ No ]
        </button>{" "}
        </div>
      </div>
    )
  }
}

const mapDispatchToProps = {
  myButton
}

export const  MyPopUp = connect(null, mapDispatchToProps)(MyPopUpComponent)

你可以做类似的事情,首先,你显示弹出初始化状态隐藏为false。正如您在渲染中看到的那样,您将使用按钮显示文本,一旦用户按下"is",或者现在您可以启动一个 Action 或做任何您想做的事情,然后将隐藏设置为 true。状态已更改,因此再次调用渲染函数返回 null,隐藏组件。

希望对你有帮助

关于javascript - 单击自定义按钮组件时热隐藏组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53672791/

相关文章:

reactjs - 如何更改图表中的标签?

javascript - 样式化组件引用错误 : Cannot access 'Component' before initialization

reactjs - 更新 Redux 存储以从数组中删除某些内容不会重新渲染

reactjs - Big App 中的 Split Reducer

javascript - Canvas 360 jquery 插件失败

javascript - AngularJS - 从 'ng-model' 获取值然后过滤

javascript - 为什么在使用解析的字符串时出现错误 'Cannot read property ' name' of null'?

javascript - 如何在 Redux 中向数组添加项目?

javascript - 如何在文本框中传递一个额外的隐藏按键?

javascript - 如何修复循环错误中的意外 `await`