Поставщик контекста не работает в React.js

Я новичок в React js и пытаюсь реализовать Context Provider в React js. Но пока у меня не получается идеального вывода.

Я храню контактную информацию в context.js, который будет выступать в качестве поставщика контекста, а в App.js я импортировал ее в App.js, а затем в Contacts.js. Я использовал Потребителя и получил значение, но все же я получаю пустую страницу. и я не уверен, почему я не могу связать компонент контакта в поставщике контекста

Контекст.js

import React, {Component} from 'react';

const Context = React.createContext();

export class Provider extends Component {
    state = {
        contacts: [{
            id: 1,
            name: "dasd B",
            email: "[email protected]",
            phone: "dsadas"
        }
    };

    render() {
        debugger
        return (
            <Context.Provider value = {this.state}>
                {this.props.childern}
            </Context.Provider>
        );
    }
}

export const Consumer = Context.Consumer;

App.js

import React, { Component } from 'react';
import Header from './components/Header';
import Contacts from './components/Contacts'
import 'bootstrap/dist/css/bootstrap.min.css';
import { Provider } from './Context'

class App extends Component {
  render() {
    return (
      <Provider>
          <div className = "App">
            <div className = "container">
                <Contacts />
            </div>
        </div>
      </Provider>
    );
  }
}

export default App;

Контакты.js

import React, { Component } from 'react'
import Contact from './Contact';
import { Consumer } from '../Context';

class Contacts extends Component {

    deleteContact = id => {
        const { contacts } = this.state;
        const newContacts = contacts.filter(contact => contact.id!== id);
        this.setState({
            contacts: newContacts
        });
    };

    render() {
        debugger
        return(
            <Consumer>
                {value => {
                    const { contacts } = value;
                    return (
                    <React.Fragment > 
                         {contacts.map(contact => ( 
                                    <Contact 
                                        key = {contact.id}
                                        contact = {contact} 
                                        deleteClickHandler = {this.deleteContact.bind(this, contact.id)}> 
                                    </Contact>
                                ))}
                    </React.Fragment>
                    );
                }}
            </Consumer>
        );
    }
}

export default Contacts;

Контакты.js

  import React, { Component } from 'react'
  import PropTypes from 'prop-types'
  
  
class Contact extends Component {

    state = {
        showContactinfo : false
    };

    onDeleteClick = () => {
      this.props.deleteClickHandler();
    }

    onEditClick() {

    }
    render() {
        const { name, email, phone } =this.props.contact;
        const { showContactinfo } = this.state;
      return (
        <div className = "card card-body mb-3">
          <h4>{name}
            {showContactinfo ? (
            <div className = "float-right">
              <i
               onClick= {this.onEditClick}
               style = {{cursor: 'pointer', fontSize: 'medium'}} 
               className = "fas fa-edit mr-3"></i>
              <i
              onClick= {this.onDeleteClick}
              style = {{cursor: 'pointer', fontSize: 'medium'}} 
              className = "fa fa-trash-alt"></i>
            </div>): 
            <i className = "fa fa-sort-down float-right" 
            style = {{cursor: 'pointer'}} 
            onClick = {() => 
              this.setState({ showContactinfo: !this.state.showContactinfo})}></i>}
            
          </h4>
          {showContactinfo ? (
          <ul className = "list-group">
              <li className = "list-group-item">Email: {email}</li>
              <li className = "list-group-item">Phone: {phone}</li>
          </ul>) : null}
        </div>
      )
    }
  }
  
  Contact.propTypes = { 
      contact: PropTypes.object.isRequired,
      deleteClickHandler: PropTypes.func.isRequired
  }

  export default Contact;

Не очень понятно в чем проблема. «Я использовал Потребителя и получил ценность, но все же я получаю пустую страницу». Значит консьюмер работает, но ничего не рендерится?

Tholle 09.03.2019 20:41

В context.js у вас есть дети с ошибкой... дети, а не дети... Это просто опечатка...

SakoBu 09.03.2019 21:44
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
2
1 840
0

Другие вопросы по теме