【问题标题】:Add a component to another component React将一个组件添加到另一个组件 React
【发布时间】:2016-08-04 19:26:28
【问题描述】:

您好,当我在输入中输入文本并按“添加”按钮时,我正在尝试添加一个名为 ListItem 的新组件。

    var Input = React.createClass({

    addListItem: function(){
    console.log(this.refs.input.value);
    <ListItem>{this.refs.input.value}</ListItem>

    },
        render: function(){
            return (
                <div>
                  <input ref="input" type="text"/>
                  <button onClick={this.addListItem}>Add</button>
                </div>
            );
        }
    });

    var ListItem = React.createClass({

        render: function(){
            return (
                <li class="listItem">
                  {this.props.value}
                </li>
            );          
        }
    });

ReactDOM.render(<Input/>, container);

问题是组件没有被创建,当我认为道具没有通过时,我也尝试在 li 元素中添加一些文本,但这不是问题。

我在这里不明白什么?

【问题讨论】:

    标签: javascript html reactjs


    【解决方案1】:

    维护项目状态并使用它来呈现 ListItem 的:

    var Input = React.createClass({
    getInitialState: function(){
        return {
            items: []
        };
    },
    addListItem: function(){
        var items = this.state.items;
        items.push(this.refs.input.value);
        this.setState({
          items: items
        });
    },
    render: function(){
        return (
            <div>
                <input ref="input" type="text"/>
                <button onClick={this.addListItem}>Add</button>
                {this.getItems()}
            </div>
        );
    },
    getItems: function(){
        return this.state.items.map(function (i) {
            return <ListItem>{i}</ListItem>
    
        });
     }
    });
    

    【讨论】:

    • 这给了我一个错误:Uncaught TypeError: this.state.items.map is not a function
    【解决方案2】:
     var Input = React.createClass({
    getInitialState(){
        return {
            list :[]
        }
    },
    addListItem: function(){
        let array = this.state.list;
         array.push({value:this.refs.input.value});
        this.setState({list: array});
    
    },
    render: function(){
        let list = this.state.list;
        console.log(list)
        let item = list&&list.map((d,i)=>{
                return (
                    <ListItem key={i}>{d.value}</ListItem>
                );
            });
        return (
            <div>
                <input ref="input" type="text"/>
                <button onClick={this.addListItem}>Add</button>
                <ul>
                    {item}
                </ul>
            </div>
        );
    }
    });
    
    var ListItem = React.createClass({
    
    render: function(){
        return (
            <li>
                {this.props.children}
            </li>
        );
    }
    });
    

    【讨论】:

    • 请提供有关此处发生的情况的信息。如果你告诉人们该做什么,他们可能会解决他们的问题。如果你告诉人们你为什么这样做,他们可能会学到一些东西。
    • 虽然此代码可以回答问题,但提供有关 如何 和/或 为什么 解决问题的附加上下文将改善答案的长期价值。 - From Review
    猜你喜欢
    • 2023-03-04
    • 2022-08-17
    • 2019-10-23
    • 1970-01-01
    • 2021-04-16
    • 2020-12-06
    • 2021-01-11
    • 1970-01-01
    • 2019-12-18
    相关资源
    最近更新 更多