反应的生命周期

时间:2017-09-28 13:09:05

标签: reactjs asp.net-mvc-4

我现在真的很困惑,当加载一个反应jsx引用的MVC视图时,首先调用哪个函数。

我的意思是我创建了一个MVC项目,它从另一个项目加载点击事件的视图。我的另一个视图加载信息并在jsx中呈现。但这并没有发生。以下是我的反应代码:

react.jsx

var App = React.createClass({
    getInitialState: function() {
        var state = {
            counter: 0,
            initialInfo: []
        };
        return state;
    },

    componentWillMount: function() {
        $.ajax({
            type: 'POST',
            url: window.location.protocol + "//" + window.location.host + '/' + 'api' + '/' + 'Application' + '/' + 'GetUserInfo',
            data: JSON.stringify({
                'userId': '15115',
                'IsUserOffShore': 'N'
            }),
            contentType: "application/json; charset=utf-8",
            dataType: 'json',
            cache: false,
            success: function(data) {
                JSON.parse(data)
                this.setState({
                    initialInfo: JSON.parse(data)
                });
            }.bind(this),
            error: function(xhr, status, err) {
                console.error(this.props.url, status, err.toString());
            }.bind(this)
        });
    },

    render: function() {
        return ( 
            <div>
                <AssignValue valueMapper = {
                    this.state.initialInfo.Assignment
                } /> 
            </div>
        );
    }
});

function AssignValue(props) {
    if (props.valueMapper != undefined) {
        props.map((type) => {
            if (type.Type == 1) {
                return <UserGreeting valuemapper2 = {
                    type
                }
                />
            }
        })
    }
}

function UserGreeting(props) {
    return ( 
        <h1> Hello World </h1>
    );
}

ReactDOM.render( <App /> , document.getElementById('authorId'));

我的上面反应jsx文件在我的index.chtml视图中引用,该视图从另一个页面点击加载。但是,我无法理解反应的生命周期。我已经浏览了这个链接:http://busypeoples.github.io/post/react-component-lifecycle/

但我的反应并不正常。它始终首先调用渲染函数,然后调用 componentWillMount 函数。由于我的代码失败,有时我得到错误必须返回有效的React元素(或null)。您可能已经返回了undefined,数组或其他一些无效对象。尝试更新已卸载(或无法装入)的组件AssignValue

this.state.initialInfo.Assignment 值是一种数组类型。有时它显示未定义,有时它有值导致问题。我做错了什么。

请原谅我,因为我是新手。

1 个答案:

答案 0 :(得分:0)

这个功能实际上并没有返回任何东西(好吧,技术上它正在返回undefined),这就是造成你错误的原因:

function AssignValue(props) {
    if (props.valueMapper != undefined) {
        props.map((type) => {
            if (type.Type == 1) {
                return <UserGreeting valuemapper2 = {
                    type
                }
                />
            }
        })
    }
}

如果您稍微对代码进行结构化以了解发生了什么,可能会有所帮助:

function _mapper(type) {
  if (type.Type == 1) {
    return <UserGreeting valueMapper2={type} />;
  }
  // return undefined; is implied here
}

function AssignValue(props) {
    if (props.valueMapper != undefined) {
        props.map(_mapper); // Not actually returning the results of .map()
    }
    // return undefined; is implied here as well
}

说实话,要说出你打算在这里做什么有点难。但是你没有从你的函数返回任何东西的事实肯定会导致错误信息。