【问题标题】:React context consumer was rendered with multiple children errorReact 上下文消费者呈现多个子错误
【发布时间】:2019-05-02 21:42:36
【问题描述】:

我只是尝试使用反应提供者,但不知何故我得到了这个错误: index.js:1437 警告:上下文使用者使用多个子级或不是函数的子级呈现。上下文使用者需要一个作为函数的子节点。如果您确实传递了一个函数,请确保它周围没有尾随或前导空格。

这是 context.js

import React, { Component } from 'react'
    const Context=React.createContext()
    class Providerr extends Component {
    state={display:false}
    displayeditor=()=>{this.setState({display:!this.state.display})  }
    render() { return (
      <Context.Provider value={{...this.state,displayeditor:this.displayeditor  }}>
          {this.props.children}
      </Context.Provider>
    )
  }
}
    const Consumer=Context.Consumer
export {Providerr,Consumer}

我想在下面消费它

import React, { Component } from 'react'
import {NavLink} from "react-router-dom"
import "./leagues.scss"
import {Consumer} from "./context.js"
export default class Navbar extends Component {

  render() {
    return (
        <nav className="navbar navbar-expand-lg">
           <a className="navbar-brand" href="#Home">
             <img src="./images/customLogo.jpg" className="navlogo"/>
           </a>        
           <div className="collapse navbar-collapse">
             <ul className="navbar-nav mx-5"> 
             <NavLink to="/">
             <li className="nav-item active mr-5">
               <div className="nav-link">
                 <span>Home</span>
               </div>  
             </li>
             </NavLink>
             <Consumer> {value =>      
             <li onClick={value.displayeditor}  className="nav-item mr-5">
               <div className="nav-link modal_lig" href=""> 
                 <span>Leagues</span>    
               </div>  
             </li> }
            </Consumer>
         </nav>     
 )}}

【问题讨论】:

  • 看起来您在消费者回调结束时在 &lt;/li 上缺少 &gt;
  • 不,它不能解决问题
  • 您是否尝试按照错误提示删除函数周围的空间? &lt;Consumer&gt; {value =&gt;。另外我不确定函数右括号后的新行是否也会影响,请尝试删除它。

标签: reactjs consumer


【解决方案1】:

将整个代码包装在Consumer 中,如下所示。另请注意,您的某些 html 元素未正确关闭。

    import React, { Component } from 'react'
import {NavLink} from "react-router-dom"
import "./leagues.scss"
import {Consumer} from "./context.js"
export default class Navbar extends Component {

    render(){
        return(
            <Consumer> 
                {value => (
                    <nav className="navbar navbar-expand-lg">
                        <a className="navbar-brand" href="#Home">
                            <img src="./images/customLogo.jpg" className="navlogo"/>
                        </a>        
                        <div className="collapse navbar-collapse">
                            <ul className="navbar-nav mx-5"> 
                                <NavLink to="/">
                                    <li className="nav-item active mr-5">
                                        <div className="nav-link">
                                            <span>Home</span>
                                        </div>  
                                    </li>
                                </NavLink>
                                <li onClick={()=>value.displayeditor()}  className="nav-item mr-5">
                                    <div className="nav-link modal_lig" href=""> 
                                        <span>Leagues</span>    
                                    </div>  
                                </li>
                            </ul>
                        </div>
                    </nav> 
                )} 
            </Consumer>
        )
    }
}

【讨论】:

  • 非常感谢!,这行得通,奇怪的是,当我并排编写此代码“ {value”时会出错,但在不同的行上没有错误,顺便说一句,我总是需要包装所有东西吗?编辑:我试过了;不需要,问题是线条
  • 好吧,为了便于阅读,我建议您将{value 移动到&lt;Consumer&gt; 组件内的新行。对于第二个问题,是的,因为您的根组件 Providerr 在您的情况下只期望一个组件来自 {this.props.children}
猜你喜欢
  • 2021-12-25
  • 1970-01-01
  • 2018-11-14
  • 2022-08-08
  • 2022-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多