WebHU - Programozási kérdések és válaszok

Hogyan alakítsuk át a belső állapot alapú React alkalmazást Redux alapúvá?

Írtam egy React alkalmazást, amely belső állapot alapú. Az "axios" könyvtárat használja az adatok webes API-ból való lekéréséhez. A következőképpen néz ki:

class OrdersTable extends React.Component {
  constructor() {
    super();

    this.state = {
      orders: [],
      ...
  }

  componentDidMount() {
    setTimeout(() => {
      axios.get("http://localhost:1234/api/orders").then(response => {
        this.setState({
          orders: response.data,
        });
      });
    }, 2000);
  }

  render () {
    return (
      <div className="content-wrapper">
        <div className="content-left">
           <BootstrapTable keyField='id' data={this.state.orders} columns={this.state.columns}
             rowStyle = {this.state.rowStyle} rowEvents={this.rowEvents}
             caption={<CaptionOrders title="Orders" />} noDataIndication={<NoData />} {...this.props} />
           <Legend />
        </div>
      </div>
    )
  }
}

Szeretném átalakítani, hogy a belső állapot helyett Reduxot használjon. A következőkkel kezdtem:

index.js:

const store = createStore(reducer);

ReactDOM.render(
  <Provider store={store}>
    <App />
  </Provider>,
  document.getElementById('root')
);

Műveletek:

import { LOAD_DATA } from '../constants/action-types';

export const loadData = orders => ({
  type: LOAD_DATA,
  payload: orders
})

Csökkentő:

export default initialState = {
  orders: []
};

const reducer = (state = initialState, action) => {
  switch(action.type) {
    case LOAD_DATA:
      return {
        ...state, orders: action.payload };
    default:
      return state;
  }
}

Tartály:

const mapStateToProps = (state) => ({
  orders: state.orders
})

const mapDispatchToProps = (dispatch) => ({
  // Should "axios" call be here and if so, how should look like?
});

export default connect(mapStateToProps, mapDispatchToProps)(OrdersTable);

Bemutató komponens:

How can I use the orders state from Redux in OrdersTable component?
19.07.2018

  • A köztes szoftver segítségével az aszinkron dolgokat, például az API-hívásokat műveletekbe helyezheti. Gyakori a redux-thunk : redux.js.org/advanced/async- action#async-action-creators 19.07.2018
  • Köszönöm, de most inkább maradok a klasszikus megközelítésnél. 19.07.2018
  • A vanilla Reduxban nem lehet aszinkron dolgokat csinálni. Szüksége lesz valamire, például redux-thunk vagy redux-saga. 19.07.2018

Válaszok:



2

A Jayce444 helyes, használd a redux-thunk-ot. Ezt a kanonikus módszernek tartanám.

nézd meg ezt a választ: https://stackoverflow.com/a/34458710/8896573

ha meg akarod tartani ezt az elemet, felejtsd el a mapDispatchToProps-t (még mindig csináld a mapStateToProps-t), és az axios válaszodban hívd meg ezt.props.dispatch(loadData (orders))

Aztán a mapStateToProps szerkezete miatt a 'rendeléseid' ez.props.orders néven érhetők el az összetevődben :)

19.07.2018
  • Úgy érted, hogy ezt a.props.dispatch(loadData(orders)) axios hívásból hívod meg az OrdersTable komponensen belüli componentDidMountból? 19.07.2018
  • igen, azt kipróbálnám. nem próbáltam. de kipróbálnám. De végül meg kell próbálnia a redux-thunk-ot. Kibróbáltad? 19.07.2018
  • Új anyagok

    A rádiógomb ellenőrzött eseményének használata a jQueryben
    Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

    Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
    Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

    Miért érdemes elkezdeni a kódolást 2023-ban?
    01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

    🎙 Random Noise #2  – Örökbefogadás és hit
    az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

    A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
    A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

    5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
    Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

    Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
    A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..