【问题标题】:React shows values in console but does not render themReact 在控制台中显示值但不渲染它们
【发布时间】:2020-12-29 01:40:08
【问题描述】:

我正在尝试根据另一个选择加载一个选择的选项。我从数组中提取数据(稍后会有更多数据)。

我的问题是我无法呈现第二个选择。我正确过滤了数据,但未添加选项。在代码的两个“console.log”中,可以看到我注释掉了,结果在console中显示。

知道我失败了什么吗?我是反应新手。如果代码非常糟糕,我深表歉意!欢迎任何帮助。

附:我不知道在这种情况下是否有什么不同,但我使用的是“Ant Design”。

import React, { useState } from 'react';
import { Row, Col, Form, Select, Input } from 'antd';


export default function SelectPetZone(props) {
    const { publicationData, setPublicationData } = props;
    const { Option } = Select;

    const arrayZones = [
      {
        departmentName: "Montevideo",
        neighborhood: ['Centro', 'Cordón', 'Flor de Maroñas', 'Manga']
      },
      {
        departmentName: "Canelones",
        neighborhood: ['Las Piedras', 'El Dorado', 'Progreso', 'La Paz']
      }
    ];

    const optionsDepartments = [];
    const [optionsNeighborhood, setoptionsNeighborhood] = useState([]);


    for(const item of arrayZones) {
        optionsDepartments.push(<Option key={item.departmentName} value={item.departmentName}> { item.departmentName } </Option>);
    }


    const chargeNeighborhood = e => {
        // Set department
        setPublicationData({ ...publicationData, department: e });

        // Load neighborhood
        for(const i of arrayZones) { 
            if(e === i.departmentName) {
                for(const j of i.neighborhood) {  
                    console.log(j); 
                    setoptionsNeighborhood(...optionsNeighborhood, <Option>{j}</Option>);
                    
                }            
            }
        }
    }



    return (
        <>
            <Row>
                <Col lg={6}>
                    <Form.Item>
                        <Select placeholder='Departamento' onChange={chargeNeighborhood} value={publicationData.department} >
                            {optionsDepartments}
                        </Select>
                    </Form.Item>
                </Col>
                <Col lg={6} offset={3}>
                    <Form.Item>
                        <Select placeholder='Barrio' onChange={e => setPublicationData({ ...publicationData, neighborhood: e })} value={publicationData.neighborhood} >                            
                            {optionsNeighborhood}
                        </Select>
                    </Form.Item>
                </Col>                
            </Row>
        </>
    )
}

【问题讨论】:

    标签: javascript reactjs antd


    【解决方案1】:

    在反应中,我们有一个叫做UseState()的东西 首先,

    import React, { useState } from 'react';
    

    然后改变

    const optionsNeighborhood = [];
    

    const [optionsNeighborhood, setoptionsNeighborhood] = useState([])
    

    然后改变

            for(const i of arrayZones) { 
                if(e === i.departmentName) {
                    for(const j of i.neighborhood) {  
                        console.log(j); // ==>  Print the correct data                  
                        optionsNeighborhood.push(j);
                    }            
                }
            }
    

            for(const i of arrayZones) { 
                if(e === i.departmentName) {
                    for(const j of i.neighborhood) {  
                        console.log(j); // ==>  Print the correct data                  
                        setoptionsNeighborhood([...optionsNeighborhood, j]);
                    }            
                }
            }
    

    【讨论】:

    • 好!我明白了。有没有办法用useState“模拟”推送?是它只添加数组的最后一项。我根据您的评论编辑了我的代码。
    • 您可以通过连接数组来模拟推送。我编辑了我的答案以包括:``` setoptionsNeighborhood([...optionsNeighborhood, j]); ``` 将 j 和 optionsNeighborhood 加在一起
    • 虽然我没有让它正常工作(选择继续加载仅一项),但我会将答案标记为正确,因为最初的问题是选项的不呈现。我想我会尝试用 FILTER 和 MAP 代替 FOR。谢谢您的帮助!编辑:因为我是 Stackoverflow 的新手,所以我不能给它 +1
    猜你喜欢
    • 2016-08-03
    • 2021-11-06
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 2021-10-23
    • 2022-01-10
    • 2021-11-02
    相关资源
    最近更新 更多