简体   繁体   English

Reactjs道具未显示。 如何改善我的代码?

[英]Reactjs props not showing up. How can I improve my code?

// initial state and other properties //初始状态和其他属性

    var ReviewControl = React.createClass({
        getInitialState: function() {
            return {
                name:'',
                feedback:'',
                movie:'',
                reviews:[] 
            };
        },
    onChangeName:function(el){
        this.setState({name:el.target.value})
    },

    onChangeFeedback:function(el) {
        this.setState({feedback:el.target.value})
    },

    onChangeMovie:function(el){
        this.setState({agent:el.target.value})
    },

    submitReview:function(el) {

//preventing default for the form //防止表单默认

        el.preventDefault();

//storing data into the reviews array created earlier //将数据存储到之前创建的reviews数组中

        this.state.reviews.push(
            {name:this.state.name, feedback:this.state.feedback, movie:this.state.movie});
        this.setState({name:'', feedback:''});
    },

    render: function() {
        var options = this.props.list.map(function(agent){

            return (<option key={agent.id} value={agent.agentName}>{agent.agentName}</option>);
        });

//rendering the form for feedback

        return (

            <div>

//creating form //创建表格

                <form onSubmit = {this.submitReview}>
                    <lable> Agent Name : </lable>
                    <input type="text" placeholder='Enter The Agent Name' value={this.state.name} onChange={this.onChangeName} />
                    <br/><br/>


                    <lable> Feedback : </lable>
                    <input type="text" placeholder='Enter Your Feedback' value={this.state.feedback} onChange={this.onChangeFeedback} />
                    <br/><br/>

                    <select onChange={this.onChangeMovie}>
                        {options}
                    </select>

                    <br/><br/>

                    <input type="submit" value="Submit"/>

                </form>

//collecting the reviews //收集评论

                <ReviewCollection reviews = {this.state.reviews} /> 

            </div>
            )
    }


});

// collecting all the reviews from the user and storing it

var ReviewCollection = React.createClass ({

    render:function () {

        var reviews = this.props.reviews.map(function(review) {
            return <Review key={review.id} movie = {review.movie} name = {review.name} feedback = {review.feedback} />
        });

        return (<div> {reviews} </div>)
    }

    });

//showing the stored values from the array review //显示数组评论中的存储值

var Review = React.createClass({
        render:function(){
            return <div>

                <span> Agent Name </span>
                {this.props.name}
                <br/>

                <span> Movie Name </span>
                {this.props.movie}
                <br/>

                <span> Feedback </span>
                {this.props.feedback}
                <br/>
            </div>
        }

});

// rendering the form //呈现表单

var finalReview = <ReviewControl list={agentList} />;
ReactDOM.render(finalReview, document.getElementById('myid'));

You aren't setting the new review state in submitReview . 您没有在submitReview设置新的审阅状态。 Just pushing into the old array isn't actually updating state. 只是推送到旧数组实际上并没有更新状态。 You have to explicitly update it. 您必须显式更新它。

this.state.reviews.push({
  name: this.state.name,
  feedback: this.state.feedback,
  movie: this.state.movie
});

this.setState({
  name: '',
  feedback: '',
  reviews: this.state.reviews
});

Another small thing I noticed is that you're using el as the argument for events. 我注意到的另一件事是,您使用el作为事件的参数。 Typically it's just e or event . 通常,它只是eevent el is usually short for element, usually a dom node. el通常是element的缩写,通常是dom节点。

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

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