Javascript 反应JS+;PHP(Mysql)=;records.map不是一个函数;;

Javascript 反应JS+;PHP(Mysql)=;records.map不是一个函数;;,javascript,arrays,reactjs,Javascript,Arrays,Reactjs,我的代码有什么问题 我的PHP文件正确返回了一个json数组,问题只存在于javascript代码中,javascript在正确的状态下实现了json,只有在使用映射显示结果时出现了错误 帮助 JS文件 import React,{Component} from 'react'; import axios from 'axios'; export default class Main extends Component{ state = { records : [],

我的代码有什么问题

我的PHP文件正确返回了一个json数组,问题只存在于javascript代码中,javascript在正确的状态下实现了json,只有在使用映射显示结果时出现了错误

帮助

JS文件

import React,{Component} from 'react';
import axios from 'axios';
export default class Main extends Component{
    state = {
        records : [],
        isLoading : true
    }
    componentDidMount(){
        this.loading();
    }

    loading = async () => {
        const response = await axios.get("http://localhost/apihunt/carro/read.php");
        const {records} = response.data;   
        this.setState({records, isLoading : false});
        //console.log(this.state.records);
    }

    render(){
        const {records, isLoading} = this.state;
        return(
            <div>
                {!isLoading ? records.map((car)=>(
                    <div key={car.id}>
                        <p>{car.id}</p>
                        <p>{car.nome}</p>
                        <p>{car.descricao}</p>
                    </div>
                )) 
                    : <p>:(</p>}
            </div>
        );
    }
}

records.map不是一个函数

映射需要数组,而不是对象,因此PHP需要创建索引数组而不是关联数组。最具体的问题在于:

carros_arr["records"][$id] = [] // defines PHP assoc, becomes JS object
carros_arr["records"][] = [] // defines PHP indexed, becomes JS array
你可以用两种不同的方法来修复它。在使用关联数组(成为JSON/JavaScript
对象
)时,PHP中需要一个索引数组(成为JSON/JavaScript
数组
)。有两种方法可以解决此问题:

// Before fetch loop define $carros_arr["records"] = [];
$carros_arr["records"][] = [
    "id" => $id,
    "nome" => $nome,
    "descricao" => html_entity_decode($descricao),
    "marca" => $marca,
    "valor" => $valor
];
或者

如果使用一行程序,您需要修改数据:

foreach ($carros_arr["records"] as &$record) {
    $record['descricao'] = html_entity_decode($record['descricao']);
}

Map需要数组,而不是对象,因此PHP需要创建索引数组而不是关联数组。最具体的问题在于:

carros_arr["records"][$id] = [] // defines PHP assoc, becomes JS object
carros_arr["records"][] = [] // defines PHP indexed, becomes JS array
你可以用两种不同的方法来修复它。在使用关联数组(成为JSON/JavaScript
对象
)时,PHP中需要一个索引数组(成为JSON/JavaScript
数组
)。有两种方法可以解决此问题:

// Before fetch loop define $carros_arr["records"] = [];
$carros_arr["records"][] = [
    "id" => $id,
    "nome" => $nome,
    "descricao" => html_entity_decode($descricao),
    "marca" => $marca,
    "valor" => $valor
];
或者

如果使用一行程序,您需要修改数据:

foreach ($carros_arr["records"] as &$record) {
    $record['descricao'] = html_entity_decode($record['descricao']);
}

如果您确定问题是您的JS而不是PHP,请删除该标记(并添加来自PHP的结果转储)。记录数据的格式是什么?这似乎不是一个数组。我编辑了帖子。如果你确定问题是你的JS而不是你的PHP,请删除该标记(并从PHP中添加一个结果转储)。你的记录数据的格式是什么?它似乎不是数组。我编辑了帖子。他仍然可以使用关联数组并执行:
Object.keys(this.state.records).map((record)=>{…})很好,我没想到。我认为良好的实践是构造数据服务器端,但是这绝对是一个解决方案,当然,对于每个人来说,他仍然可以使用一个关联数组并执行:<代码>对象.KEY(这个.STATE.REST).map((记录)={}…});<代码>很好,我没想到。我认为良好的实践是构造好服务器端的数据,但这绝对是一个解决方案,当然,对每个人来说也是如此。