Я новичок в 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;В context.js у вас есть дети с ошибкой... дети, а не дети... Это просто опечатка...





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