Javascript 反应下拉选择

Javascript 反应下拉选择,javascript,reactjs,Javascript,Reactjs,试图让我的下拉列表允许我选择一个选项,但它没有发生。无法找到有关此函数是否需要更多信息的进一步文档。不知道为什么我不能选择。我的代码: import React from 'react'; import { Media, Dropdown, DropdownToggle, DropdownMenu, DropdownItem, Button, } from 'reactstrap'; import PropTypes from 'prop-types'; class U

试图让我的下拉列表允许我选择一个选项,但它没有发生。无法找到有关此函数是否需要更多信息的进一步文档。不知道为什么我不能选择。我的代码:

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

class UserPreview extends React.Component {
  toggle = (user) => this.setState({DropdownOpen: !this.state.DropdownOpen});

  state = {DropdownOpen: false}

  render() {
    let { user } = this.props;
    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, this.props.user)}>
            <DropdownToggle caret>
              Admin
            </DropdownToggle>
            <DropdownMenu>
              <DropdownItem>Read</DropdownItem>
              <DropdownItem>Write</DropdownItem>
            </DropdownMenu>
          </Dropdown>
        </td>
        <td>
          <Button color="danger">Delete</Button>
        </td>
      </tr>
    )
  }
}

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

export default UserPreview;
从“React”导入React;
进口{
媒体
下拉列表,
下拉开关,
下拉菜单,
下拉项,
按钮
}来自“反应带”;
从“道具类型”导入道具类型;
类UserPreview扩展了React.Component{
toggle=(user)=>this.setState({DropdownOpen:!this.state.DropdownOpen});
状态={DropdownOpen:false}
render(){
让{user}=this.props;
返回(
{user.name}
管理
阅读
写
删除
)
}
}
UserPreview.propTypes={
用户:PropTypes.shape({
名称:PropTypes.string,
//TODO:添加url proptype。
url:PropTypes.string,
}).要求,
};
导出默认用户预览;
与使用选项选择不同,您在下拉列表中使用了什么,如图所示

更新代码:

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

class UserPreview extends React.Component {
  toggle = (user) => this.setState({DropdownOpen: !this.state.DropdownOpen});

  state = {DropdownOpen: false}

  handleChange(e) {
    this.Dropdown({
      [e.target.name]: e.target.value
    });
  }

  onChange = (e) => {
    this.setState({item: e.target.value});
  }

  render() {
    let { user } = this.props;
    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>
        <td>
          <Button color="danger">Delete</Button>
        </td>
      </tr>
    )
  }
}

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

export default UserPreview;
从“React”导入React;
进口{
媒体
下拉列表,
下拉开关,
下拉菜单,
下拉项,
按钮
}来自“反应带”;
从“道具类型”导入道具类型;
类UserPreview扩展了React.Component{
toggle=(user)=>this.setState({DropdownOpen:!this.state.DropdownOpen});
状态={DropdownOpen:false}
手变(e){
这个,下拉列表({
[e.target.name]:e.target.value
});
}
onChange=(e)=>{
this.setState({item:e.target.value});
}
render(){
让{user}=this.props;
返回(
{user.name}
管理
阅读
写
删除
)
}
}
UserPreview.propTypes={
用户:PropTypes.shape({
名称:PropTypes.string,
//TODO:添加url proptype。
url:PropTypes.string,
}).要求,
};
导出默认用户预览;

可能是开关?看起来你宣布绑定错误了

下面是使用
toggle={this.toggle.bind(this)}

这将超出渲染本身的功能范围

toggle (e) {
  this.setState (
    toggle: true
  );
}

此外,要保留该值,您需要在更改处理程序中添加
e.target.value
,因为这是一个需要保存的事件。

您可以创建一个代码段吗?它应该打开,而不是在下拉列表中打开,请参阅下拉列表的选项。这是代码段,我使用了这些按钮。看看这里,你可以看到我的镜子这些:我不完全得到你到底在寻找什么?能够从reactstrap下拉列表中选择,其中一个选项。现在,下拉列表可以工作,但如果我单击某个选项,它不会保留或选择该值。那么它应该是什么样子?我没有看到任何错误,但我很容易出错。考虑编写一个更改处理程序,切换只应该是代码> ToGruts= {这个。切换。绑定(这个)} /代码>它看起来像是在使用FLUX?谢谢。这就是事件发生的方式吗?是否应在render中调用此函数?你可以参考任何例子吗?我可以写一个如何处理这个事件的例子。更改处理程序应该在render之外调用。在我看来,它可以通过以下两种方式之一进行处理。我想到的是:
handleChange(e){this.setState({[e.target.name]:e.target.value});
}或this:onChange=(e)=>{this.setState({item:e.target.value});}只是不确定如何让它们访问它需要的内容。即使这是一个组件的名称,我也必须应用它吗?