首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript:在函数调用中传递有效参数,其中一个参数未定义

Javascript:在函数调用中传递有效参数,其中一个参数未定义
EN

Stack Overflow用户
提问于 2020-06-07 10:50:46
回答 1查看 44关注 0票数 0

这是一个带有Redux和Firebase的反作用web应用程序。当我遇到这个问题时,我已经完成了Reacti-Redux-i18n(多语言支持)的实现。这个应用程序支持两个地区,比方说'en‘和'pl’。当前区域设置存储在状态中,并且与firebase同步,这就是我遇到这种奇怪行为的原因:这是3个参数中的一个,而在函数调用未被定义之前,函数将失败。

下面是我调用的函数:

代码语言:javascript
复制
export const SaveLanguageToDb = (uid, user, lang) => {
  console.log('in function:', uid, user)
  database.ref(`users/${uid}`).update({ currentLanguage: lang, ...user })
  .then(() => {
    return
  })
  .catch(e => { console.log('Error:', e) })
}

该函数包含3个参数:

  • uid: string,
  • user: object,
  • lang: string

它是从两个地点调用的:

  1. 在应用程序加载时获取用户数据,包括。通过验证将其保存回firebase,以防区域设置不受支持,并返回到'en‘。如果删除了对用户先前存储的地区的支持,这是可能的。这个电话是正确的。当用户单击标志pic以更改区域设置时,来自语言更改组件的
  2. 。由于user对象进入未定义的.

,此调用失败

下面是从以下位置调用函数的组件:

代码语言:javascript
复制
import React from 'react'
import { connect } from 'react-redux'
import en from '../../../public/images/United_Kingdom.png'
import pl from '../../../public/images/Poland.png'
import { SaveLanguageToDb } from '../../actions/user'
import { setLocale, } from 'react-redux-i18n'

export const LingoFlags = ({ uid, user, SaveLanguageToDb, setLocale }) => {
  console.log('before call:', uid, user)
  return (
  <div>
    <button
      className="button button--link"  
      onClick={() => {
        setLocale('en')
        SaveLanguageToDb(uid, user, 'en')
      }}
    >
      <img src={en} alt="en" />
    </button>
    <button
      className="button button--link"  
      onClick={() => {
        console.log('onClick:', uid, user)
        setLocale('pl')
        SaveLanguageToDb(uid, user, 'pl')
      }}
    >
      <img src={pl} alt="pl" />
    </button>
  </div>
)}

const matchStateToProps = (state) => ({
  uid: state.auth.uid,
  user: state.user,
})

const mapDispatchToProps = (dispatch) => ({
  SaveLanguageToDb: (lang) => dispatch(SaveLanguageToDb(lang)),
  setLocale: (lang) => dispatch(setLocale(lang))
}) 

export default connect(matchStateToProps, mapDispatchToProps)(LingoFlags)

console.log确认在调用之前有正确的数据,但是在被调用的函数中,user对象未定义,而uid字符串被正确传递,如下所示:

Name:06N6iv34gZfyWeF {displayName:"Some“,电子邮件:"somenamel@gmail.com",emailVerified: true,numberOfVisits: 102,firstVisitAt: 1591402705798,…} LingoFlags.js:9

onClick:06N6iv34gZfyWeF {displayName:"Some“,电子邮件:"somename@gmail.com",emailVerified: true,numberOfVisits: 102,firstVisitAt: 1591402705798,…} LingoFlags.js:24 action @i18n/SET_LOCALE@ 19:13:40.651 redux-logger.js:1

in function:06N6iv34gZfyWeF 未定义 user.js:41

未知错误: Reference.update失败:第一个参数包含未定义的.

我希望这是足够的信息,让人对这个谜感兴趣。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-07 11:10:33

根据mapDispatchToProps,'SaveLanguageToDb‘只接收一个参数。这可能就是问题所在吗?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62244231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档