javascript - React 在点击另一个 React 组件后渲染一个组件

标签 javascript reactjs

非常新的 react 。我正在创建一个包含一系列下拉菜单的页面,其想法是当您在一个下拉菜单上选择一个选项时,会在其正下方附加一个相同的下拉菜单。

所有的 div 和 selects/options 都是 React 组件,我试图给其中一个初始状态“firstTime == true”,然后当你单击一个选项时(如果它是 true),它会呈现另一个 <Dropdown /> event.target.parentElement 下面的元素。

var Dropdown = React.createClass({
  getInitialState: function () {
    return{firstTime: true};
  },
  change: function(event){
    var x = event.target;
    this.state.firstTime==true ? ReactDOM.render(<Dropdown options={OptionChoices} dropdownClass="Poop" />, wrapper) : console.log("oh well");
    this.setState({firstTime: false});
  },
  render: function() {
    return (
      <select onChange={this.change} className={this.props.dropdownClass}>
        {this.props.options.map(function(option){
          return (
              <Option value={option.value} key={option.value}>{option.label}</Option>
            );
        })}
    </select>
    );
  }
});

不幸的是,它不断出现“目标容器不是 DOM 元素”。这是有道理的,因为我试图将其放入 react 生成的元素中,但对我想做的事情并没有太大帮助。

感谢任何和所有的帮助,如果这是一个非常基本的问题,我们很抱歉。

fiddle :https://jsfiddle.net/y4wfLy1z/

最佳答案

我建议始终渲染两个选择选项(第一个和渲染中的选项)并在第一次调用时隐藏第二个选项。

因此,在第一次调用的更改事件中,您可以更改隐藏第二个元素的可见性(this.state.dropdownClass)的状态变量。更改时,将 className 设置为所需的类属性 (this.props.dropdownClass)。

在 ES6 中,这将如下所示:

export default class Dropdown extends React.Component {
    constructor() {
        super();
        this.firstTime = true;
        this.first_options = [{value: 'first1', label: 'First Option 1'}, {value: 'first2', label: 'First Option 2'}];
        this.state = {dropdownClass: 'hide'};
    }

    change(event) {
        console.log('change');
        this.setState({dorpdownClass: this.props.dropdownClass});
    }

    render() {
        return (
           <div>
               <select onChange={this.change.bind(this)} className='Poop'>
                    {this.first_options.map(function (option) {
                        return (
                            <option value={option.value} key={option.value}>{option.label}</option>
                        );
                    })}
                </select>
                <select onChange={this.change.bind(this)} className={this.props.dropdownClass}>
                    {this.props.options.map(function (option) {
                        return (
                            <option value={option.value} key={option.value}>{option.label}</option>
                        );
                    })}
                 </select>
           </div>
       );
    }
}

关于javascript - React 在点击另一个 React 组件后渲染一个组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34667424/

相关文章:

css - React.js 转换不适用于 "fade out"

javascript - 如何使用 React 在浏览器中渲染应用程序预览

performance - 在 React Native 中有效更新大型平面列表中的所有项目

javascript - google maps api 地理定位和地点搜索

javascript - 添加到我的幻灯片放映的链接

javascript - 尝试验证签名时来自以太的无效签名错误

javascript - 如何自动向 React 元素添加适当的类名

javascript - 如何将带有 HTML 实体的字符串转换为规范化形式?

javascript - 准备使网站与 Internet Explorer 8 兼容

reactjs - 查询字符串 react 路由器路径