这是一个带有Redux和Firebase的反作用web应用程序。当我遇到这个问题时,我已经完成了Reacti-Redux-i18n(多语言支持)的实现。这个应用程序支持两个地区,比方说'en‘和'pl’。当前区域设置存储在状态中,并且与firebase同步,这就是我遇到这种奇怪行为的原因:这是3个参数中的一个,而在函数调用未被定义之前,函数将失败。
下面是我调用的函数:
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个参数:
它是从两个地点调用的:
user对象进入未定义的.,此调用失败
下面是从以下位置调用函数的组件:
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失败:第一个参数包含未定义的.
我希望这是足够的信息,让人对这个谜感兴趣。谢谢。
发布于 2020-06-07 11:10:33
根据mapDispatchToProps,'SaveLanguageToDb‘只接收一个参数。这可能就是问题所在吗?
https://stackoverflow.com/questions/62244231
复制相似问题