Сохраняйте данные innerHTML и входные данные в базу данных firebase - PullRequest
0 голосов
/ 16 апреля 2019

У меня есть этот код, где я хочу сохранить данные в базе данных. Я хочу иметь возможность сохранить выбранную встречу в базе данных вместе с входными данными в форме. Я новичок, чтобы отреагировать и застрял в данный момент, чтобы продолжить работу с моим кодом, поэтому некоторые предложения о том, что я могу сделать, будут высоко оценены.

Так выглядит мое приложение с ошибкой

Я подключился к базе данных Firebase и могу выдвинуть данные, но не могу сохранить данные из своих свойств как handleClick ..

Ошибка при попытке отправить форму

import './App.css';
import firebase from 'firebase';
const uuid = require('uuid');


class App extends Component {

        constructor(props) {
            super(props);
            // gör strängar av state
            this.state = {
                uid: uuid.v1(),
                meeting:'',
                name:'',
                email:'',
            };

            // binder propertys till click funktion 
            this.handleClick = this.handleClick.bind(this);
            this.handleChange = this.handleChange.bind(this);
            this.handleSubmit = this.handleSubmit.bind(this);
            this.inputData = this.inputData.bind(this);

            // kopplar databas
            var config = {
                apiKey: "",
                authDomain: "",
                databaseURL: "",
                projectId: "",
                storageBucket: "",
                messagingSenderId: ""
            };
            firebase.initializeApp(config);
            // console.log(firebase);

            // skapar databasen lokalt med referens ref
            var database = firebase.database();
            var ref = database.ref('meeting');

            // variabel data med sträng id
            var data ={
                id: '',
            }
            // Pushar upp data till databas
            ref.push(data);
        }

        // hämtar klick för mötes knappar och skriver ut text i knappar
        handleClick = (e) =>{
            console.log(e.target.innerHTML);
            alert('Du har valt ett möte');
        }

        // hämtar API för olika möten 
        componentDidMount(){
            fetch('http://www.mocky.io/v2/5c9cdca03300004d003f2151')
            .then(res => res.json())
            .then(json => {
                let meetings = []
                json.forEach(meeting => {
                    if(new Date(meeting.startDate).getDay() !== new Date(meeting.endDate).getDay()){
                        let day1 = {
                            activity:meeting.activity,
                            location:meeting.location,
                            startDate:meeting.startDate,
                        }
                        let day2 = {
                            activity:meeting.activity,
                            location:meeting.location,
                            endDate:meeting.endDate,
                        }

                        meetings.push(day1,day2)

                    }else{
                        meetings.push(meeting)
                    }

                });
                console.log(meetings)
                this.setState({
                    isLoaded:true,
                    items: meetings,
                })
            });

            // import firebase och ref sträng
            firebase
            .database()
            .ref(`Newdata/${this.state.uid}`)
            .on('value', snap => console.log('from db', snap.val()));
        }


        // hämtar ny data 
    handleChange(e){
        this.setState({
            name: e.target.name});

    }

    // hämtar ref och skriver ut sträng med set till firebase
    handleSubmit(e){
        alert('Er bokning är bekräftad: ' + this.state.value);
        console.log('Du har bekräftat er bokning')
        e.preventDefault();
        firebase
        .database()
        .ref(`Newdata/${this.state.uid}`)
        .set({
            meeting: this.state.meeting,
            name: this.state.name,
            email: this.state.email,
        })
        .catch(error => console.log(error));
    }

// knyter input text till property
    inputData (_e){
        const meeting = this.refs.meeting1.value;
        const name = this.refs.name1.value;
        const email = this.refs.email1.value;
        this.setState({ meeting, name, email});
    }

  render() {

        var { isLoaded, items } = this.state;

        if (!isLoaded){
            return <div>Loading...</div>;
        }
        else {

    return (
            <>
      <div className="App">
                <div className="AppHeader">
                    <h1>Boka ditt möte nedan</h1>

                </div>
        <ul>

                    {items.map((item,i) => (
                        <li key={i}>

                    {/* kopplar handleClick till onChange*/}
                            <button onClick={(e) => this.handleClick(e)} onChange={this.inputData} ref="meeting1" className="select">
                            {item.activity}<br/>
                            Starttid: {item.startDate}<br/>
                            Sluttid: {item.endDate}<br/> 
                            Plats: {item.location}<br/>
                            </button>
                        </li>
                    ))}

                    </ul>

      </div>

        <div className="selectedMeeting">Fyll i dina uppgifter och bekräfta</div>

                <form onSubmit={this.handleSubmit} className="bookingSection">
                    <label>
                        Name:
                        <input type="text" value={this.state.name} onChange={this.inputData}
                        ref="name1"/>
                    </label>
                    <label>
                        E-mail:
                        <input type="text" value={this.state.email} onChange={this.inputData}
                        ref="email1"/>
                    </label>
                    <input className="confirm" type="submit" value="Bekräfta" />
                </form>
                <div className="viewSelect"></div>
                </>
    );
    }

}
}

export default App;

Я получаю сообщение об ошибке при попытке сохранить собрание, имя, адрес электронной почты в firebase.

Ответы [ 2 ]

2 голосов
/ 16 апреля 2019

По умолчанию база данных доступна только аутентифицированным пользователям.

'rules': {
  '.read': 'auth != null',
  '.write': 'auth != null'
}

Вы должны определить правила на консоли Firebase

Вы можете разрешить читатьили напишите информацию всем, кто находится в стадии разработки, а затем, если необходимо, добавьте больше правил (я предлагаю вам ознакомиться с правилами Firebase):

'rules': {
  '.read': true,
  '.write': true
}

Это должно решить вашу проблему на данный момент.Кроме того, если вы новичок в React, я предлагаю вам научиться использовать Redux и комбинировать его с React Redux Firebase , это очень поможет вам наряду с React.

0 голосов
/ 16 апреля 2019

Полное объяснение этой проблемы можно найти в Stackoverflow ответ . Также объясняется, как правильно обрабатывать вход в систему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...