【问题标题】:Unable to parse data from react firebase object无法解析来自 react firebase 对象的数据
【发布时间】:2020-01-02 22:20:40
【问题描述】:

我有以下功能组件,它尝试使用 react-redux-firebase 库从我的 firebase 实时数据库中查询数据:

export default function Questions() {
    useFirebaseConnect([{ path: 'questions' }])

    const questionList = useSelector(state => state.firebase.data['questions'])

    for (var test in questionList) {
        // THIS WORKS
        var propValue = questionList['12342134234']['content']
        console.log(propValue)
    }
    // THIS RESULTS IN AN ERROR
    var propValue = questionList['12342134234']['content']
    console.log(propValue)

    }
}

现在,问题是,我无法直接访问 firebase 对象的值。当我遍历返回的对象时,我可以查看属性名称。但是,当我尝试直接访问这些属性时(通过 for 循环外的questionList[propName]),我的应用程序崩溃了,因为该值未定义。

将值记录到控制台,我得到:

我不明白为什么在 for 循环中执行 console.log(questionList['12342134234']) 可以工作,但是当我在外部执行时,我得到 undefined 并且我的应用程序崩溃了。这对我来说没有意义。

我也可以使用JSON.stringify() 读取对象,但是当我尝试使用JSON.parse() 解析它时,我得到SyntaxError: JSON Parse error: Unexpected identifier "undefined"。这是字符串化文本的输出:

我是否以正确的方式解决这个问题?我如何从这个返回的对象中获取各个属性值?

更新: 因此,当我执行以下操作时:

setTimeout(() => {
        // let parsedList = JSON.stringify(questionList, null, 2)
        // let parsed = JSON.parse(parsedList)
        console.log('BP: ', questionList['12342134234'])
    }, 6000)

我得到以下输出: 这意味着它可以工作一次,但也会崩溃。

【问题讨论】:

    标签: javascript reactjs firebase parsing react-redux


    【解决方案1】:

    一般是非对象数据造成的,需要先解析数据。

    尝试使用JSON.parse,那么您应该可以直接访问这些值:

    let parsedList = JSON.parse(questionList)
    console.log(parsedList['12342134234'])
    

    更新

    当你得到 questionList 时,似乎它已经被解析了。

    如果它与settimeout一起工作,那么firebase请求可能会导致问题,检查是否加载了问题数据:

    import { isLoaded } from 'react-redux-firebase'`
    
    ...
    
    const questionList = useSelector(state => state.firebase.data['questions'])
    
    if (isLoaded(questionList)) {
      console.log('BP: ', questionList['12342134234'])
    }
    

    【讨论】:

    • 我收到JSON Parse error: Unexpected identifier "undefined"
    • 我完全按照你的演示做了,我仍然得到SyntaxError: JSON Parse error: Unexpected identifier "undefined"。我不知道为什么,因为你的解释是有道理的。
    • 也许你需要 async/await const questionList = await useSelector...
    • 我也试过了,但是在异步函数中使用钩子会给我一个错误,如果有帮助,我还会用一些额外的细节更新我的问题
    • 为了测试,如果你在settimeout中记录数据,你可以“模拟”等待。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-27
    • 1970-01-01
    • 2012-03-18
    • 2017-01-12
    相关资源
    最近更新 更多