Descriptografia de middleware React-Redux

Recentemente, no quarto capítulo da implementação do react + redux, o nevoeiro e o nevoeiro causados ​​por um maravilhoso middleware foram lançados e quebrados.Por meio de uma série de testes, o nevoeiro da função de curry foi finalmente descriptografado.

importar Reagir de "reagir"; 
import {renderizar} de "react-dom"; 
import {createStore, applyMiddleware} de "redux"; 
import {composeWithDevTools} de 'redux-devtools-extension'; 
import {Provider} de "react-redux"; 
import {createLogger} do "redux-logger"; 
importar thunk de "redux-thunk"; 
redutor de importação de "./reducers"; 
// import {getAllProducts} de "./actions"; 
importar App de "./containers/App.jsx"; 
import "./index.css"; 

const middleware = [thunk]; 
if (process.env.NODE_ENV! == "produção") { 
  middleware.push (createLogger ());


 * Obter produtos (livros) 
 * / 
const getProductsAction = products => ({ 
  type: types.RECEIVE_PRODUCTS, 
  products 
}) 

/ ** 
 * Função de criação de ação 
 * Crie uma função de criação de ação vinculada para despachar automaticamente 
 * / 
exportar const getAllProducts = () => expedição => { 
  shop.getProducts (produtos => { 
    expedição (getProductsAction (produtos)) 
  }) 
} 

// store.dispatch (getAllProducts ()); 
// O método de chamada acima é realmente o seguinte formulário, com base em getAllProducts () constrói um formato de chamada de despacho (ação) 
// Função Currying, o despacho fica como sotre.dispatch store.dispatch 
((despacho) => { 
  dispatch ({ 
    type: 'RECEIVE_PRODUCTS', 
    produtos: [
      {"id": 1, "title": "" O Guia Definitivo para JavaScript "", "price": 136,20, "inventário": 3}, 
      {"id": 2, "title": "" Python Core Programming "" , "preço": 44,50, "estoque": 8}, 
      {"id": 3, "título": "" Programação C "", "preço": 41,00, "estoque": 2} 
    ] 
  }); 
} ) 
// Teste de evolução 1-1 O teste concluiu que isso não é possível, apenas para descobrir posteriormente que é apenas para definir o despacho de construção (ação) sem executar 
store.dispatch (() => dispatch => { 
  dispatch ({ 
      type: 'RECEIVE_PRODUCTS' , 
      produtos: [ 
      {"id": 1, "title": "" O guia definitivo para JavaScript "", "preço": 136,20, "inventário": 3}, 
      {"id":2, "title": "《Python》 编程》", "preço": 44,50, "inventário": 8}, 
      {"id": 3, "title": "《C 程序 设计》", "preço": 42,00, "inventário": 2} 
    ] 
    });
});RECEIVE_PRODUCTS ', 
      produtos: [{"id": 1, "title": "《JavaScript 权威 指南》", "preço": 136,20, "inventário": 3},

// Teste de evolução 1-2 É possível, use apply () para executar () => função para gerar estrutura de expedição (ação) 
store.dispatch ((() => dispatch => { 
  dispatch ({ 
      type: 'RECEIVE_PRODUCTS', 
      produtos: [ 
      {"id": 1, "title": "" O Guia Autoritário para JavaScript "", "price": 136,20, "inventário": 3}, 
      {"id": 2, "title": "" Python Core Programação "", "preço": 44,50, "estoque": 8}, 
      {"id": 3, "title": "" Programação C "", "preço": 42,00, "estoque": 2} 
    ] 
    } ); 
}). apply ()); 

// Teste de evolução 2 
const action1 = () => (expedição) => { 
  expedição ( 
    { 
      tipo: '
      {"id": 2, "title": "" Python Core Programming "", "price": 44,50, "inventário": 8}, 
      {"id": 3, "title": "" C Programming "" , "price": 43.00, "inventário": 2} 
      ] 
    } 
  ); 
} 
store.dispatch (action1); // Isso não funcionará, porque o valor é uma assinatura de função que precisa ser executada para gerar a expedição necessária 
store.dispatch (action1 ( )); // Tudo bem, esse tipo de explicação é muito longo, mas lentamente perceba. 
// Teste de evolução 3 
store.dispatch (() => { 
  let dispatch = store.dispatch; 
  dispatch ( 
    { 
      type: 'RECEIVE_PRODUCTS', 
      produtos: [{"id": 1, "title": "O Guia Autoritário para JavaScript") "," preço ": 136,20," inventário ": 3}, 
      {" id ": 2,
 
  let dispatch = store.dispatch; 
  dispatch ( 
    { 
      type: 'RECEIVE_PRODUCTS', 
      produtos: [{"id": 1, "title": "" O Guia Autoritário para JavaScript "", "price": 136,20 , "inventário": 3}, 
      {"id": 2, "title": "" Python Core Programming "", "price": 44,50, "inventário": 8}, 
      {"id": 3, "title" : "" Programação C "", "preço": 45,00, "estoque": 2} 
      ] 
    } 
  ); 
} 
store.dispatch (action2); 

// Através da evolução 3, a evolução 3-1 deve entender a função currying, É declarar a função na função e executar a função 
// então voltar para getAllProducts () e a primeira função de evolução que descobrimos que a loja.expedição (ação) 
// Esta é a declaração de expedição (ação), declaramos principalmente o corpo da função de ação, pois a origem da expedição é realmente
// É internamente atribuído e implementado pela função de curry. Como a função evolution 3 3-1, deixe dispatch = store.dispatch;
// Principalmente o código a seguir é equivalente a reescrever a função de despacho sotre, semelhante à realização de aop 
// O interno receberá um segmento de código de função curry . Quanto às assinaturas de funções e variáveis ​​requeridas pelo segmento de código, elas são implementadas dentro do aop
// const middleware = [thunk]; 
// if (process.env.NODE_ENV! == "produção") { 
// middleware.push (createLogger ()); 
//} 
// const store = createStore (redutor, composeWithDevTools ( 
// applyMiddleware (... middleware), 
//)); 
// 


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

  

Acho que você gosta

Origin www.cnblogs.com/ms_senda/p/12738739.html
Recomendado
Clasificación