javascript - React Render 未更新 Ajax 查询的响应

标签 javascript reactjs

我的组件填充了一个数组,该数组确定将在 render 函数(显然是 componentDidMount 函数)中显示的内容

但是当它更新 this.state.containers 时没有任何反应。我已将 console.log 放入第一个 render循环,成功显示:

Image of JSON Response

但是客户端没有任何变化,所以我不知道我的循环是否不好,但我没有收到 JS 错误。所以我不确定问题是什么,对于 React 来说还很陌生,所以任何帮助都会非常感谢。

var AdminForumContainer = React.createClass({
    getInitialState: function() {
        return { containers: [] }
    },
    componentDidMount: function() {
        $.ajax({
            method: 'GET',
            url: '/admin/manage/forum/populate',
            success: function(data) {
                var {containers} = this.state;
                for (var i = 0; i < data.length; i++) {
                    containers.push(data[i]);
                }
                this.setState({containers});
            }.bind(this)
        })  
    },
    createMainThread: function(containerid) {

    },
    createSubThread: function(containerid) {

    },
    render: function() {
        return (
            <div>
                {this.state.containers.map(function(container) {
                    {console.log(container)}
                    <table key={container.containerid} className="containers">
                        <caption>{container.containername}</caption>
                        <thead className="containerTitle">
                            <tr>
                                <td colspan="2">Main Threads</td>
                            </tr>
                        </thead>
                        <thead>
                            <tr>
                                <td>Thread Name</td>
                                <td>Delete</td>
                            </tr>
                        </thead>
                        <tbody>
                            {
                                container.mainthreads.map(function(mainthread) {
                                    return (
                                    <tr key={mainthread.threadid}>
                                        <td>{mainthread.threadname}</td>
                                        <td><button className="button alert">Delete</button></td>
                                    </tr>
                                    )
                                })
                            }
                            <tr>
                                <td><input type="text"/></td>
                                <td><button className="button">Create</button></td>
                            </tr>
                        </tbody>
                        <thead>
                            <tr>
                                <td colspan="2">Sub Threads</td>
                            </tr>
                        </thead>
                        <tbody>
                            {
                                container.mainthreads.map(function(subthread) {
                                    return (<tr key={subthread.threadid}>
                                        <td>{subthread.threadname}</td>
                                        <td><button className="button alert">Delete</button></td>
                                    </tr>)
                                })
                            }
                            <tr>
                                <td><input type="text"/></td>
                                <td><button className="button">Create</button></td>
                            </tr>
                        </tbody>
                    </table>
                })}
            </div>
        )
    }
});

ReactDOM.render(<AdminForumContainer/>, document.getElementById("AdminForumContainer"))

最佳答案

我会这样写:

            var containers = this.state.containers;
            for (var i = 0; i < data.length; i++) {
                containers.push(data[i]);
            }
            this.setState({containers: containers});

现在可以用了吗?显示什么 this.setState({containers:containers}, function() { console.log(this.state)); ?

关于javascript - React Render 未更新 Ajax 查询的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34170877/

相关文章:

javascript - 如何 gitignore 快照文件夹?

javascript - Fluxxor/React.JS 中的服务调用

javascript - 按其值之一合并数组

javascript - TweenLite 动画无法正常工作

Javascript 随机数生成器出现 NaN

javascript - 在 div 中显示 .doc

javascript - 过滤非字母数字并制作标题大小写

reactjs - redux 中的 Api 状态控制,即 react-redux jhipster 生成的代码中的 PENDING、SUCCESS、FAILURE

javascript - React 测试库 - TypeError : expect(. ..).toHaveTextContent 不是函数

javascript - 在 React 中添加/删除类的正确方法