javascript - react 函数不返回任何值

标签 javascript reactjs ecmascript-6 firebase-realtime-database

我目前正在使用 firebase 使用特定用户的名字和姓氏填充网站,但由于某种原因它无法正常工作。

getUserName(){
    firebaseAuth().onAuthStateChanged((user) => {
        if(user){
            // var name = ref.ref('users/' + user.uid).once('value').then((snapshot) => console.log(snapshot.val().displayName));
            var name = user.displayName;
            console.log("name in function: " + name); //prints full name
            return name;
        }
    });
}


render() {
    var name = this.getUserName();
    console.log("name: " + name); //prints undefined
    return (
        <div className="col-sm-6 col-sm-offset-3">
            <h1> Welcome {this.getUserName()} asdfasd </h1>
        </div>
    );
}

这是我的两个功能。出于某种原因,当我在两种情况下都打印出 name 变量时,我得到了两个不同的变量。在 getUserName() 中,它打印出用户的全名,然后我返回该值。当 DOM 呈现时,“name”变量未定义,即使 getUserName() 函数打印出全名。任何帮助将不胜感激!

最佳答案

你的方法 getUserName()实际上并没有返回任何东西,所以当您尝试将其返回值分配给 name 时-变量,像这样var name = this.getUserName(); , 你总是会设置 nameundefined .

正如 Shailesh Prajapati 建议的那样,您应该在组件状态中设置名称。我什至会争辩说,你应该使用像 Redux 这样的东西将它分离到一个全局状态。另外,你不应该调用 this.getUserName()render() 内功能,因为它可能(而且很可能会)对性能非常不利。

这是代码,包含所有建议:

componentWillMount(){
    this.getUserName();
}

getUserName(){
    firebaseAuth().onAuthStateChanged((user) => {
        if(user){
            var name = user.displayName;
            this.setState({ name: name });
        }
    });
}

render() {
    return (
        <div className="col-sm-6 col-sm-offset-3">
            <h1> Welcome {this.state.name} asdfasd </h1>
        </div>
    );
}

关于javascript - react 函数不返回任何值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41326976/

相关文章:

javascript - 即使 pure 总是更快,我什么时候应该使用 React 无状态组件?

javascript - 编辑并替换没有元素 ID 的 DOM 节点

javascript - 如何在 JavaScript 中链接两到三个第三方回调?

javascript - 过滤以JS开头的值

javascript - 是否可以动态地将 JSX 添加到 React 代码中

reactjs - TypeScript 提示我的 setState 语句使用了属性访问器

javascript - 转换具有不同数据类型的数组

javascript - React 元素和粗箭头函数

javascript - 使用 MethodDecorator 更改函数的参数,而不更改 "this value"?

javascript - 意外 token ,预期 :