Probleme bei der Verwendung der Drizzle-Bibliothek in React

Mit Ubuntu 16.04

Grüße, ich habe nur das Tutorial befolgt, um Drizzle hier zum Laufen zu bringen . Ich bin zu diesem Schritt vorgerückt, als ich versuchte, die App mit dem Befehl „npm start“ vom Terminal aus auszuführen. Ich wurde dann mit der Fehlermeldung „TypeError: drizzle is undefined“ begrüßt. Ich habe es nach dem Aktualisieren von Paketen über npm erneut versucht, aber der Fehler ging weiter. Ich habe den Code reproduziert, den ich unten verwende:

app.js:

    import React, { Component } from 'react';
    import logo from './logo.svg';
    import './App.css';

    class App extends Component {
      state = { loading: true, drizzleState: null };

      componentDidMount() {
        const { drizzle } = this.props;

        // subscribe to changes in the store
        this.unsubscribe = drizzle.store.subscribe(() => {

          // every time the store updates, grab the state from drizzle
          const drizzleState = drizzle.store.getState();

          // check to see if it's ready, if so, update local component state
          if (drizzleState.drizzleStatus.initialized) {
            this.setState({ loading: false, drizzleState });
          }
        });
      }

      compomentWillUnmount() {
        this.unsubscribe();
      }

      render() {
        if (this.state.loading) return "Loading Drizzle...";
        return <div className="App">Drizzle is ready</div>;
      }
    }

    export default App;

index.js

            import React from 'react';
            import ReactDOM from 'react-dom';
            import './index.css';
            import App from './App';
            import registerServiceWorker from './registerServiceWorker';
            // import drizzle functions and contract artifact
            import { Drizzle, generateStore } from "drizzle";
            import 'contract_name' from "./contracts/'contract_name'.json";

            ReactDOM.render(<App />, document.getElementById('root'));
            registerServiceWorker();

            // let drizzle know what contracts we want
            const options = { contracts: ['contract_name'] };

            // setup the drizzle store and drizzle
            const drizzleStore = generateStore(this.props.options);
            const drizzle = new Drizzle(this.props.options, drizzleStore);

Ich habe den tatsächlichen Namen des Vertrags, den ich verwende, aus Datenschutzgründen durch „Vertragsname“ ersetzt. Ist irgendetwas offensichtlich, dass ich falsch mache?

Antworten (1)

In Ihrer index.js-Datei müssen Sie die Drizzle-Instanz als Requisiten an die App-Komponente übergeben:

ReactDOM.render(<App drizzle={drizzle} />, document.getElementById("root"));

Sie sollten Ihre consts auch vor ReactDOM.render deklarieren:

...
// let drizzle know what contracts we want
const options = { contracts: [MyStringStore] };

// setup the drizzle store and drizzle
const drizzleStore = generateStore(options);
const drizzle = new Drizzle(options, drizzleStore);

// pass in the drizzle instance
ReactDOM.render(<App drizzle={drizzle} />, document.getElementById("root"));
registerServiceWorker();
Ausgezeichnet, das hat den Trick getan. Danke sehr!