组件不会在反应中呈现

Posted

技术标签:

【中文标题】组件不会在反应中呈现【英文标题】:Component won't render in react 【发布时间】:2018-07-28 01:56:27 【问题描述】:

以下是我的代码:

import React,  Component  from 'react';
import './App.css';

class buttonGroup extends Component
  render()
    return (<button onClick=this.countClick>Count it up</button>);
  


class App extends Component 
  constructor(props) 
    super(props);
    this.state = 
      message:"state from constructor",
      counter: 1
    ;
    this.handleClick = this.handleClick.bind(this);
    this.countClick = this.countClick.bind(this);
  

  handleClick(e) 
    this.setState( () => (message:"state from click handler") )
  

  countClick(e) 
    this.setState( (prev, props) => (counter: (prev.counter + 1)))  
  

  render() 
    return (
      <div>
        <div>
          <h1>this.state.message</h1>
          <h1>this.state.counter</h1>
        </div>
        <button onClick=this.handleClick>Change it up</button>
        <buttonGroup/> 
      </div>
    );
  




export default App;

我知道这可能是非常明显的事情,但我似乎无法让“buttonGroup”内的“count it up”按钮进行渲染。我尝试过添加括号、删除它们、重新排序所有内容。

请帮我解决这个问题。

【问题讨论】:

如果它帮助您解决问题,请接受答案。或者,您可以询问任何查询以防万一。 :) 【参考方案1】:

自定义组件应始终以大写字母开头(Pascal 大小写)。所有以小写字母开头的组件都将被视为 react 的内置组件,而不是用户定义或自定义的组件。

尝试将 buttonGroup 更改为 ButtonGroup 并检查它。

同样在 buttonGroup 类中,您正在使用未定义的 countClick 方法。如果您希望使用 App 组件的 countClick 方法,您可能应该执行 this.props.countClick 并将其作为道具传递给 ButtonGroup,例如 &lt;ButtonGroup countClick = this.countClick /&gt;

【讨论】:

【参考方案2】:
    您必须使用标题大小写的名称定义组件。喜欢, ButtonGroup 而不是 buttonGroup。 实际上阻止您执行的可能错误 code 是该组件在应用组件中的使用,是组件名称和结束组件的斜线之间缺少的空格。

你必须这样写: &lt;ButtonGroup /&gt; 要么 &lt;ButtonGroup&gt; &lt;/ButtonGroup&gt;

以下是运行的完整代码:

import React,  Component  from 'react';
import './App.css';

class ButtonGroup extends Component
  render()
    return (<button onClick=this.countClick>Count it up</button>);
  


class App extends Component 
  constructor(props) 
    super(props);
    this.state = 
      message:"state from constructor",
      counter: 1
    ;
    this.handleClick = this.handleClick.bind(this);
    this.countClick = this.countClick.bind(this);
  
  
  handleClick(e) 
    this.setState( () => (message:"state from click handler") )
  
  
  countClick(e) 
    this.setState( (prev, props) => (counter: (prev.counter + 1)))  
  
  
  render() 
    return (
      <div>
        <div>
          <h1>this.state.message</h1>
          <h1>this.state.counter</h1>
        </div>
        <button onClick=this.handleClick>Change it up</button>
        <ButtonGroup /> 
      </div>
    );
  




export default App;
    同样在您的自定义组件 ButtonGroup 定义中,您正在使用尚未定义的 countClick()。在你关心渲染之后,如果你想使用App组件的countClick(),你必须做this.props.countClick并将它作为&lt;ButtonGroup countClick = this.props.countClick /&gt;这样的prop传递给ButtonGroup[上面的完整代码只是解决你的渲染问题]这个prop事情取决于您的实施。

【讨论】:

以上是关于组件不会在反应中呈现的主要内容,如果未能解决你的问题,请参考以下文章

history.push 正在更改 url 但未在反应中呈现组件

反应无状态子组件不会更新父组件中的状态更改

嵌套反应路由器组件不会在页面重新加载时加载/渲染?

更新 Redux 存储时反应组件不重新渲染

将异步结果从父组件传递给子组件反应功能组件

错误 - 在反应搜索组件中呈现多个实例