javascript - 无法将状态从父组件传递给子组件(番茄钟状态计数器)

标签 javascript reactjs

我是一个 React 新手,我正在尝试构建一个番茄钟。我实际上被困在尝试使按钮 + 和 - 更改我在状态上设置的数字。 在我的主应用程序组件中,我有:

class App extends React.Component{
  constructor(props){
    super(props)
    this.state ={
      breakValue: 5,
      sessionValue: 25
    }

现在我尝试将状态传递给 SetTimer 组件(它将处理这些按钮 + 和 -)以更新数字: 所以我创建了这个函数来传递状态(这是处理 + 按钮的示例):

handleUpdate = value => this.setState({
    breakValue : value+1,
    sessionValue: value+1
  })

我将该函数作为子组件内的 props 传递。 这是 SetTimer 子组件,其 props 位于 App 的 render 方法中:

<SetTimer handleUpdate={this.handleUpdate}  id="break" type= "Break" value={this.state.breakValue}

之后,我进入 SetTimer 组件并创建了另一个传递值参数 props 的函数:

class SetTimer extends React.Component {
    constructor(props){
        super(props)
    }

    click(){
        this.props.handleUpdate(this.props.value)

    }

我将 Onclick 函数传递给按钮标签:

<button onClick={this.click} 

编译器告诉我他们无法读取 click 函数内 Undefined 的属性。我已经使用这种方法在 parent 之间将状态传递给 child ,并且它总是有效。我在这里缺少什么?非常感谢你们的帮助

最佳答案

您正确地传递了 props,但错误地读取了它们。

让我们了解以下代码的作用是什么?

<button onClick={this.click} ... />

这会在按钮上添加单击事件以及与其关联的处理程序。众所周知,每种编程语言都在特定范围/上下文中运行代码块。对于此函数,默认情况下它将是文档的范围/上下文。

要使用 props,我们需要类组件 SetTimer 的上下文。

有两种方法,

  1. 传递执行 onClick 的上下文。
<button onClick={this.click}
  • 将点击函数设置为箭头函数,这样它就不会接受任何上下文并始终在组件的范围内运行。
  • click = () => {
      this.props.handleUpdate(this.props.value)
    }
    

    关于javascript - 无法将状态从父组件传递给子组件(番茄钟状态计数器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58383021/

    相关文章:

    html - 如何在 react 创建元素中添加没有值(value)的数据属性?

    javascript - 消除由于不可预见的错误而导致的一组功能的不完整执行(JavaScript)

    javascript - Bootstrap 多选限制问题

    javascript - 鼠标悬停图片有效但对齐?

    javascript - 基本 React 代码不产生任何输出

    reactjs - 如何将从 Firestore 获取的数据作为 props 传递给组件

    javascript - 在 Node js 中保留响应的值

    javascript - 聚类位置数据忽略异常值

    javascript - 如何限制在表行鼠标事件上添加和删除多个类名

    javascript - 在 react 中创建动态组件