简体   繁体   English

条件传递组件作为react中的数组prop

[英]conditional passing component as array prop in react

How can I conditionally pass the footer's button component? 如何有条件地传递页脚的按钮组件? cancelBtnBasicModal and okBtnBasicModal the button is still there without text label. cancelBtnBasicModalokBtnBasicModal该按钮仍然没有文本标签。

Below is a modal component, it worked, but if I don't pass in 下面是一个模态组件,它起作用了,但是如果我不传递

render() {

    const { titleBasicModal, showBasicModal, handleOkBasicModal, handleCancelBasicModal, 
        contentBasicModal, cancelBtnBasicModal, okBtnBasicModal, loading } = this.props

    return (
      <div>
        <Modal
          visible={showBasicModal}
          title={titleBasicModal}
          onCancel={handleCancelBasicModal}
          footer={[
              <Button onClick={handleCancelBasicModal}>
                {cancelBtnBasicModal}
              </Button>,
              <Button key="submit" type="primary" size="large" loading={loading} onClick={handleOkBasicModal}>
                {okBtnBasicModal}
              </Button>
            ]}
        >
          {contentBasicModal}
        </Modal>
      </div>
    );
  }

I tried 我试过了

footer={[
              {cancelBtnBasicModal && <Button onClick={handleCancelBasicModal}>
                {cancelBtnBasicModal}
              </Button>},
              <Button key="submit" type="primary" size="large" loading={loading} onClick={handleOkBasicModal}>
                {okBtnBasicModal}
              </Button>
            ]}

But won't work coz footer prop accept array. 但是将不起作用。

You need to pass an Array, spread operation is for rescue. 您需要传递一个数组, spread操作是为了营救。 You can do something like that: 您可以执行以下操作:

footer={[
   ...(cancelBtnBasicModal ? [
      <Button onClick={handleCancelBasicModal}>
          {cancelBtnBasicModal}
      </Button>]: []),
      <Button key="submit" type="primary" size="large" loading={loading} onClick={handleOkBasicModal}>
          {okBtnBasicModal}
      </Button>
]}

You can separate that logic by setting an array footerBtns with the default button ( okBtnBasicModal in this case) and then we add the next button if it's passed through props . 您可以通过使用默认按钮(在本例中为okBtnBasicModal )设置数组footerBtns来分隔该逻辑,然后如果下一个按钮通过props ,则添加下一个按钮。

Finally assign footerBtns to footer in the Modal component. 最后将footerBtns分配给Modal组件中的footer

render() {

  const { titleBasicModal, showBasicModal, handleOkBasicModal, 
    handleCancelBasicModal, contentBasicModal, cancelBtnBasicModal, 
    okBtnBasicModal, loading } = this.props

  let footerBtns = [
    <Button key="submit" type="primary" size="large" loading={loading} 
      onClick={handleOkBasicModal}>
      {okBtnBasicModal}
    </Button>
  ]
  /* using unshift to add the button to the beginning of the Array */
  cancelBasicModal && footerBtns.unshift(
    <Button onClick=
      {handleCancelBasicModal}>{cancelBtnBasicModal}
    </Button>
  );
return (
  <div>
      <Modal
        visible={showBasicModal}
        title={titleBasicModal}
        onCancel={handleCancelBasicModal}
        footer={footerBtns}>
          {contentBasicModal}
      </Modal>
    </div>
  );
}

More info on using unshift() 有关使用unshift() 更多信息

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM