正在反应 jsx 中运行 reactstrap 下拉菜单

Posted

技术标签:

【中文标题】正在反应 jsx 中运行 reactstrap 下拉菜单【英文标题】:Is running reactstrap dropdown in react jsx 【发布时间】:2017-11-29 16:27:24 【问题描述】:

新的反应和使用 reactstrap。我只是试图添加一个下拉菜单并运行此代码,因为它最初在语法上出错,但是当我修改时,它会引发更多错误。代码如下:

import React from 'react';
import 
  Media,
  Dropdown,
  DropdownToggle,
  DropdownMenu,
  DropdownItem,
 from 'reactstrap';
import PropTypes from 'prop-types';

const UserPreview = (user) => (

this.toggle = this.toggle.bind(this);
this.state = 
  DropdownOpen: false
  ;


toggle() 
  this.setState(
    DropdownOpen: !this.state.DropdownOpen
  );


  <tr className="user">
    <td>
      <Media>
        <img
          alt=`$user.name avatar`
          className="avatar d-flex mr-3"
          src=user.url />
        <Media body>user.name</Media>
      </Media>
    </td>
    <td>
      <Dropdown isOpen=this.state.DropdownOpen toggle=this.toggle>
        <DropdownToggle caret>
          Admin
        </DropdownToggle>
        <DropdownMenu>
          <DropdownItem>Read</DropdownItem>
          <DropdownItem>Write</DropdownItem>
        </DropdownMenu>
      </Dropdown>
    </td>
  </tr>
);

UserPreview.propTypes = 
  user: PropTypes.shape(
    name: PropTypes.string,
    // TODO: add an url proptype.
    url: PropTypes.string,
  ).isRequired,
;

export default UserPreview;

【问题讨论】:

定义发生了什么错误?您能否尽可能具体地提出您的问题,或者提出MVCE? 【参考方案1】:

您的代码包含很多错误。我已将它们删除并添加了 cmets,

import React from 'react';
import 
  Media,
  Dropdown,
  DropdownToggle,
  DropdownMenu,
  DropdownItem,
 from 'reactstrap';

import PropTypes from 'prop-types';

//you should use class if your component has its own state
class UserPreview extends React.Component

    //use constructor to define state and initialize component
    constructor(props)
        super(props)
        this.toggle = this.toggle.bind(this);
        this.state = 
            DropdownOpen: false
        
    


    toggle() 
        this.setState(
            DropdownOpen: !this.state.DropdownOpen
        );
    
    render()
        //you will need to bind toggle so that you can use setstate in it.
        return(
            <tr className="user">
                <td>
                    <Media>
                        <img
                            alt=`$user.name avatar`
                            className="avatar d-flex mr-3"
                            src=user.url />
                        <Media body>user.name</Media>
                    </Media>
                </td>
            <td>
                <Dropdown isOpen=this.state.DropdownOpen toggle=
                this.toggle.bind(this)>
                    <DropdownToggle caret>
                        Admin
                    </DropdownToggle>
                    <DropdownMenu>
                        <DropdownItem>Read</DropdownItem>
                        <DropdownItem>Write</DropdownItem>
                    </DropdownMenu>
                </Dropdown>
            </td>
        </tr>
    )



UserPreview.propTypes = 
  user: PropTypes.shape(
    name: PropTypes.string,
    // TODO: add an url proptype.
    url: PropTypes.string,
  ).isRequired,
;

export default UserPreview;

【讨论】:

为什么在此处删除用户,因为它引用了另一个主组件? 另外,JSX可以不使用.bind()

以上是关于正在反应 jsx 中运行 reactstrap 下拉菜单的主要内容,如果未能解决你的问题,请参考以下文章

在 className if-else 语法中反应 JSX [重复]

对 jsx 文件反应 js webpack 捆绑错误

使用 CRA 时解决 JSX 语法错误(创建反应应用程序)

我如何从反应模式引导中获得价值?

如何键入 Reactstrap 的 Spinner 的 Wrapper 反应函数?

reactstrap 样式显示问题