基于 React 函数的组件不会 return 嵌套映射函数中的组件

React function based component wont return component inside nested map function

我正在尝试根据输入类型输出不同的组件,但是进入 DOM 的组件或任何东西都没有呈现(又名 console.logs 正确触发以确认 if/if else statements are working correctly. 不太确定如何解决,因为我们不能将它移动到基于 class 的组件中,因为你不能在基于 class 的组件中使用反应挂钩,而我们目前使用 useStaticQuery 反应挂钩查询 WordPress。

    const ServiceQuestions = filter => {
    const { allWpService } = useServiceQuery()

    const renderQuestions = id => {
        allWpService.nodes.map(service => {
        if (service.id === id.filter) {
            service.serviceQuestions.questions.map(question => {
            question.questionInputField.map(inputField => {
                if (inputField.inputType === "text") {
                console.log(inputField.inputType)
                } else if (inputField.inputType === "number") {
                console.log(inputField.inputType)
                } else if (inputField.inputType === "radio") {
                return <InputCheckboxImageTop />
                } else {
                console.log("Cannot determine the inputType")
                }
            })
            })
        }
        })
    }

    return <>{renderQuestions(filter)}</>
    }

您的 renderQuestions 函数没有 return 结果数组

你可以替换

const renderQuestions = id => {
        allWpService.nodes.map(service => {

来自

const renderQuestions = id => {
        return allWpService.nodes.map(service => {

或者在 allWpService.nodes.map

周围使用圆括号而不是大括号

根据上面建议的评论,我删除了嵌套映射,而是使用了 forEach 循环,这很有用,所以为了将来参考这里是解决方案:

const ServiceQuestions = filter => {
    const { allWpService } = useServiceQuery()

    const renderQuestions = id => {
    allWpService.nodes.map(service => {
        if (service.id === id.filter) {
        service.serviceQuestions.questions.forEach(data => {
            data.questionInputField.forEach(field_data => {
            if (field_data.inputType === "text") {
                console.log(field_data.inputType)
            } else if (field_data.inputType === "number") {
                console.log(field_data.inputType)
            } else if (field_data.inputType === "radio") {
                return <InputCheckboxImageTop />
            } else {
                console.log("Cannot determine the inputType")
            }
            })
        })
        }
    })
    }

    return <>{renderQuestions(filter)}</>
}