Reactjs 对此作出反应。状态将过时

Reactjs 对此作出反应。状态将过时,reactjs,Reactjs,我有下面的组件,它从(Django)服务器获取JSON响应,并通过列表状态上的映射将结果呈现给。这正如预期的那样有效 class Listings extends Component { state = { listings: [], } loadListings() { const endpoint = '/api/listings/' const csrfToken = Cookies.get('csrftoken')

我有下面的组件,它从(Django)服务器获取JSON响应,并通过
列表
状态上的映射将结果呈现给
。这正如预期的那样有效

class Listings extends Component {
    state = {
        listings: [],
    }

    loadListings() {
        const endpoint = '/api/listings/'
        const csrfToken = Cookies.get('csrftoken')
        let thisComp = this
        let lookupOptions = {
            method: 'GET',
            headers: {
                'Content-type': 'application/json',
                'X-CSRFToken': csrfToken
            },
            credentials: 'include'
        }

        fetch(endpoint, lookupOptions)
        .then(function(response) {
            return response.json()
        }).then(function(responseData) {
            // console.log(responseData.results)
            thisComp.setState({
                listings: responseData.results
            })
        }).catch(function(error) {
            console.log("error", error)
        })
    }

    componentDidMount() {
        this.setState({
            listings: []
        })
        this.loadListings()
    }

    render() {
        const {listings} = this.state
        return (
            <Container className='pl-0 pr-0' style={{paddingTop: this.props.topPadding, height: '100vh'}} fluid='true'>
                <div className='row p-0 no-gutters' style={{height: '100%'}}>
                    <div className='col-md-6' style={{height: '100%'}}>
                        <Scrollbars style={{height: '100%', width: '100%'}}>
                            {listings.length > 0 ? listings.map((listingItem) => {
                                return (
                                    <ListingInline listing={listingItem} />
                                )
                            }) : <p>No Listings Found</p>}
                        </Scrollbars>
                    </div>
                    <div className='col-md-6 d-none d-md-block' style={{height: '100%', width: '100%'}}>
                        <Map listings={listings} />
                    </div>
                </div>
            </Container>
        )
    }
}

export default Listings;


这里传递的是整个列表状态数组,而不仅仅是一个值

所以,要调用Map组件,您必须通过这种方式在循环中传递Map组件

....
{listings.length > 0 ? 
     listings.map((listingItem) => {
              return (
                    <Map listing={listingItem} />
              )
     }) : 
<p>No Listings Found</p>}
。。。。
{listings.length>0?
listings.map((listingItem)=>{
返回(
)
}) : 
未找到任何列表

}
或者您可以在映射组件中映射列表数组..所以您的映射组件如下

{listings.length > 0 ? 
     listings.map((listingItem) => {
              return (
                    <div>{listingItem}</div>
              )
     }) : 
<p>No Listings Found</p>}
{listings.length>0?
listings.map((listingItem)=>{
返回(
{listingItem}
)
}) : 
未找到任何列表

}
如果组件在加载之前不知道如何处理它,那么它将与其中的任何内容一起传递,这可能会导致问题。“无法传递到”是什么意思?地图组件中可能也存在一些问题,您没有向我们展示,这些问题无法正确响应更改的道具。React无法将对象渲染为子对象,控制台中是否存在任何错误?控制台中没有错误。
在本质上是相同的(即,在阅读此.props后呈现一些div),这很好。
componentDidMount
仅在组件装载后触发一次。您正在调用该函数以获取该方法中的数据,因此在该生命周期方法之后才能访问该数据
{listings.length > 0 ? 
     listings.map((listingItem) => {
              return (
                    <div>{listingItem}</div>
              )
     }) : 
<p>No Listings Found</p>}