当前位置: 首页 > 知识库问答 >
问题:

改变reactjs组件状态中字段的值(数据来自firebase)

丌官霖
2023-03-14

我只想从Firebase数据库中获取一个字符串,并更新组件中的“eventname”字段,但我很难做到这一点。到目前为止我的代码:

import React from 'react';
import {ref} from '../Firebase';

class EventDisplay extends React.Component {
    constructor () {
        super();
        this.state = {
            eventName: "No event Selected."
        };
    }
    render () {
        return (<div>
            <h1>Name of Event: {this.state.eventName}</h1>
            <h1>Date and Time: Dummy Name</h1>
            <h1>Event Description: Dummy Name</h1>
        </div>);
    }

    changeEventName(str) {
        this.setState({eventName: str});
    }

    componentWillMount() {
        const events = ref.child('events/event1/Title');
        var param;
        events.on('value', (function(snapshot) {
            param = snapshot.val();
            console.log(snapshot.val());
            changeEventName(param);
            })
        );
        console.log(param);
    }


}

export default EventDisplay;

但是,changeEventName似乎没有定义它所在的位置。在我试图记录param的控制台中也会出现“undefined”,但snapshot.val()具有所需的字符串。谢谢

共有1个答案

金谭三
2023-03-14

changeEventName所在位置似乎未定义

在调用ChangeEventName时,需要在其前面加上this

this.changeEventName

另外,由于您是在回调中调用它,因此首先需要绑定该方法,以便保留this的值。有很多方法可以做到这一点,最常见的是:

this.changeEventName = this.changeEventName.bind(this)
events.on('value', ((snapshot) => { ... }));
 类似资料:
  • 我是reactjs的新手,我不知道如何从父组件中更改子组件的状态。下面是代码 每当对父组件中的执行时,我希望子组件接收。 有什么建议吗?

  • 问题内容: 我想在数组的末尾添加一个元素,这是正确的方法吗? 我担心如果就地修改阵列可能会造成麻烦-是否安全? 制作数组副本的另一种选择似乎是浪费的。 问题答案: 该阵营的文档说: 将此this.state视为不可变的。 您将直接更改状态,即使您此后再次“重置”状态,也有可能导致易于出错的代码。F.ex,它可能导致某些生命周期方法(如不会触发)。 在更高版本的React中,建议的方法是在修改状态以

  • 我目前有一个类组件和一个函数组件在我的主组件 以下是的代码段: 类组件 功能部件 因此,我想做的是通过按钮的onClick操作,从功能组件更改类组件的状态。我怎样才能完成任务?

  • 问题内容: 我想在数组的末尾添加一个元素,这是正确的方法吗? 我担心如果就地修改阵列可能会造成麻烦-是否安全? 制作数组副本的另一种选择似乎是浪费的。 问题答案: 该阵营的文档说: 将此this.state视为不可变的。 您将直接更改状态,即使您此后再次“重置”状态,也有可能导致易于出错的代码。F.ex,这可能会导致某些生命周期方法(如不会触发)。 在更高版本的React中,建议的方法是在修改状态

  • 问题内容: 我正在使用ReactJS构建一个非常原始的测验应用程序,但无法更新组件的状态。它的行为是,尽管在以下方面始终落后一步,但它仍为DOM提供了正确的数组索引: 问题答案: 是不必是同步操作: 不会立即变异,但会创建待处理的状态转换。向后进入 无法保证对呼叫的同步操作,并且可以为提高性能而对呼叫进行批量处理。 因此,此处可能仍保留先前的值: 相反,请 使用 状态转换完成后调用的回调函数:

  • 以下是: code>button.jsx的来源并不重要,它有一个常规的HTML单选按钮,触发本机DOM事件 预期流量为: null 尝试:在的onChange处理程序中: 问题: 尝试:在的onChange处理程序中: