javascript - 填充数组项上的映射函数后似乎为空

标签 javascript reactjs user-interface return map-function

我有一个组件,可以呈现两个单独的带有信息的表。每个表都有自己的数组,通过“map”函数从中提取数据,并且每个元素都变成表数据元素。第一个表显示正确,但是,当我到达第二个表时,使用map函数后,元素显示为“null”。

当我在 Mozilla 浏览器的调试器中检查问题时,我看到的是,一切一开始都很好 - 数组不是未定义的,它有它的元素。之后,在 map 函数中,“x”元素就是它应该是的元素。一切都很好,但是,当我想从“x”中选择一个特定的东西时(因为“x”是一个对象本身,包含许多不同的键和值),例如x.name,“名称”是未定义的。所以看来键是未定义的。也许我没有正确存储对象?

问题出现在 DOM 结构中,即“newShips.map”的第二个表中。

return (
    <div className="row">
        <div className="col-md-6">
            <MDBContainer className="float-left">
                <MDBRow>
                    <MDBCol md="6">
                        <p className="h5 text-center mb-4">Create Your Playlist</p>
                    </MDBCol>
                </MDBRow>
                <div>
                    <MDBTable hover>
                        <MDBTableBody>
                            {this.state.info.map(x => {
                                return <Fragment>
                                    <tr>
                                        <td>
                                            {x.name}
                                        </td>
                                        <button onClick={() => this.addToList(x)}>
                                            Add To Playlist
                                            </button>
                                    </tr>
                                </Fragment>
                            })}
                            <button onClick={this.setPreviousPage} className="float-left">previous page</button>
                            <button onClick={this.setNextPage} className="float-right">next page</button>
                        </MDBTableBody>
                    </MDBTable>
                </div>
            </MDBContainer>
        </div>
        <div className="col-md-6">
            <MDBContainer className="float-right">
                <MDBRow>
                    <MDBCol md="6">
                        <p className="h5 text-center mb-4">My Playlist</p>
                    </MDBCol>
                </MDBRow>
                <div>
                    <MDBTable hover>
                        <MDBTableBody>
                            {newShips.map(x => {
                                return <ul>
                                    <li>
                                        {x.name}
                                    </li>
                                    <button>Remove from Playlist</button>
                                </ul>
                            })}
                            <button onClick={this.setPreviousPage} className="float-left">previous page</button>
                            <button onClick={this.setNextPage} className="float-right">next page</button>
                        </MDBTableBody>
                    </MDBTable>
                </div>
            </MDBContainer>
        </div>
    </div>
)

我期望发生的是显示对象中的“name”键,但如果“x”对象具有值,为什么“name”属性未定义?

最佳答案

如果数组不为空,则尝试下面的代码片段 - var self = 这个

(即使上下文发生变化,self 也被用来维护对原始 this 的引用。)

现在,

                        {self.state.newShips.map(x => {
                            return <ul>
                                <li>
                                    {x.name}
                                    .
                                    .
                                    and so on

希望对您有帮助! 祝你好运!

关于javascript - 填充数组项上的映射函数后似乎为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55745732/

相关文章:

user-interface - 如何从已启用的图标创建已禁用的图标

linux - linux中运行Electron的最小gui系统是什么

javascript - 如何高效地将html5 canvas的内容导入到flash中?

javascript - 如何在 React 应用程序中初始化 Bootstrap 4 弹出窗口?

javascript - 在 React 元素之间传输数据

reactjs - 如何在 React Route 的父级中设置状态变量?

jquery ui sortable - 如何在触发时禁用可排序?

javascript - 使用 AngularJS 单击按钮时如何更新 html 页面中的值

javascript - 使用 Jquery 将 DOM 元素保存到变量中

javascript - js和jquery的OOP框架