freeCodeCamp/curriculum/challenges/german/03-front-end-development-li.../react-and-redux/connect-redux-to-react.md

4.1 KiB

id title challengeType forumTopicId dashedName
5a24c314108439a4d4036147 Redux mit React verbinden 6 301426 connect-redux-to-react

--description--

Nachdem du nun die Funktionen mapStateToProps() und mapDispatchToProps() geschrieben hast, kannst du sie verwenden, um state und dispatch auf die props einer deiner React-Komponenten zuzuordnen. Die connect Methode von React Redux kann diese Aufgabe übernehmen. Diese Methode hat zwei optionale Argumente, mapStateToProps() und mapDispatchToProps(). Sie sind optional, weil du vielleicht eine Komponente hast, die nur auf den state zugreifen, aber keine Aktionen absetzen muss, oder andersherum.

Um diese Methode zu verwenden, übergibst du die Funktionen als Argumente und rufst das Ergebnis sofort mit deiner Komponente auf. Diese Syntax ist ein wenig ungewöhnlich und sieht wie folgt aus:

connect(mapStateToProps, mapDispatchToProps)(MyComponent)

Hinweis: Wenn du eines der Argumente für die Methode connect weglassen willst, übergibst du stattdessen null.

--instructions--

Der Code-Editor enthält die Funktionen mapStateToProps() und mapDispatchToProps() und eine neue React-Komponente namens Presentational. Verbinde diese Komponente mit der connect-Methode aus dem globalen ReactRedux-Objekt mit Redux und rufe sie sofort in der Presentational-Komponente auf. Weise das Ergebnis einer neuen Konstanten (const) namens ConnectedComponent zu, die die verbundene Komponente darstellt. Das war's, jetzt bist du mit Redux verbunden! Versuche, eines der Argumente von connect in null zu ändern und beobachte die Testergebnisse.

--hints--

Die Komponente Presentational sollte gerendert werden.

assert(
  (function () {
    const mockedComponent = Enzyme.mount(React.createElement(AppWrapper));
    return mockedComponent.find('Presentational').length === 1;
  })()
);

Die Komponente Presentational sollte über connect eine Eigenschaft messages erhalten.

assert(
  (function () {
    const mockedComponent = Enzyme.mount(React.createElement(AppWrapper));
    const props = mockedComponent.find('Presentational').props();
    return props.messages === '__INITIAL__STATE__';
  })()
);

Die Komponente Presentational sollte eine EigenschaftsubmitNewMessage über connect erhalten.

assert(
  (function () {
    const mockedComponent = Enzyme.mount(React.createElement(AppWrapper));
    const props = mockedComponent.find('Presentational').props();
    return typeof props.submitNewMessage === 'function';
  })()
);

--seed--

--after-user-code--

const store = Redux.createStore(
  (state = '__INITIAL__STATE__', action) => state
);
class AppWrapper extends React.Component {
  render() {
    return (
      <ReactRedux.Provider store = {store}>
        <ConnectedComponent/>
      </ReactRedux.Provider>
    );
  }
};
ReactDOM.render(<AppWrapper />, document.getElementById('root'))

--seed-contents--

const addMessage = (message) => {
  return {
    type: 'ADD',
    message: message
  }
};

const mapStateToProps = (state) => {
  return {
    messages: state
  }
};

const mapDispatchToProps = (dispatch) => {
  return {
    submitNewMessage: (message) => {
      dispatch(addMessage(message));
    }
  }
};

class Presentational extends React.Component {
  constructor(props) {
    super(props);
  }
  render() {
    return <h3>This is a Presentational Component</h3>
  }
};

const connect = ReactRedux.connect;
// Change code below this line

--solutions--

const addMessage = (message) => {
  return {
    type: 'ADD',
    message: message
  }
};

const mapStateToProps = (state) => {
  return {
    messages: state
  }
};

const mapDispatchToProps = (dispatch) => {
  return {
    submitNewMessage: (message) => {
      dispatch(addMessage(message));
    }
  }
};

class Presentational extends React.Component {
  constructor(props) {
    super(props);
  }
  render() {
    return <h3>This is a Presentational Component</h3>
  }
};

const connect = ReactRedux.connect;
// Change code below this line

const ConnectedComponent = connect(mapStateToProps, mapDispatchToProps)(Presentational);