
ReSub é uma biblioteca disponibilizada pela Microsoft + Open Source para gravação de Reagir componentes que gerencia automaticamente inscrições para fontes de dados simplesmente acessando-los.
sugere o uso do TypeScript. De seus documentos:
é bom usar reenviar Sem TypeScript, mas sem acesso aos decoradores de métodos do TypeScript, lojas e componentes não podem alavancar autosubscriptions e, como tal, perder muito de seu valor.
ReSub cairia nas mesmas categorias que Redux ou MobX.
na minha opinião, a coisa mais próxima que eu compararia isso é MobX. A biblioteca ReSub gerencia automaticamente assinaturas de fontes de dados simplesmente acessando-as e tem sido muito bom trabalhar em minha experimentação até agora, reduzindo o clichê e oferecendo uma API fácil de entender.
neste post, vou analisar como configurar um novo projeto React Native e implementar o ReSub como uma maneira de gerenciar o estado. Faremos isso criando um aplicativo todo muito básico.
o código final para este exemplo está localizado aqui e está no ramo resub-medium-example
.
para começar, primeiro criaremos um novo projeto React Native, configuraremos o TypeScript, adicionaremos e configuraremos tsconfig.json
e instalaremos os tipos React e React Native necessários, bem como a dependência de reenvio.
- Crie o projeto e mude para o diretório
react-native init rnresub// then cd into directory after project is createdcd rnresub
2. Instale o TypeScript (neste tutorial, estamos usando a versão 2.3.2)
npm i typescript --save-dev
3. Instalar tipos
npm i @types/react-native @types/react --save-dev
4. Instalar Reenvio
npm i resub --save
5. Criar tsconfig.json
touch tsconfig.json
Em tsconfig.json
adicione o seguinte config:
{
"compilerOptions": {
"target": "es2015",
"module": "commonjs",
"jsx": "react",
"outDir": "build",
"rootDir": "src",
"allowSyntheticDefaultImports": true,
"noImplicitAny": true,
"experimentalDecorators": true,
"preserveConstEnums": true,
"allowJs": true,
"sourceMap": true
},
"exclude":
}
acima de configuração, estamos definindo algumas coisas, como o nosso diretório raiz (rootDir
, na nossa aplicação src
) e criar diretório de saída (outDir
, no nosso aplicativo de compilação).
o diretório de saída (build
) será criado para nós quando o typescript for compilado.
isso significa que agora precisamos ir em frente e criar o diretório src
, que é onde estaremos escrevendo todo o nosso texto datilografado.
em seguida, adicione um script de compilação ao seu pacote.json em scripts:
"scripts": {
"start": "node node_modules/react-native/local-cli/cli.js start",
"test": "jest",
"build": "tsc -w"
},
com este script, podemos chamar npm run build
de nossa linha de comando e ele iniciará o compilador typescript. O sinalizador -w
dirá ao compilador para observar os arquivos para quaisquer alterações e, quando as alterações acontecerem, ele recompilará o código automaticamente.
na raiz do projeto, crie o diretório src com dois arquivos: um ponto de entrada (App.tsx
)e um armazenamento(TodoStore.tsx
). A Loja será o nosso armazenamento de dados.
mkdir src
touch src/App.tsx src/TodosStore.tsx
agora que nossos arquivos e dependências estão configurados, vamos atualizar o índice.s.JS ou índice.androide.arquivo js para usar o código que será compilado pelo TypeScript.
em índice.s.JS ou índice.androide.js, atualize o arquivo para o seguinte:
import React, { Component } from 'react'import {
AppRegistry
} from 'react-native'import App from './build/App'AppRegistry.registerComponent('rnresub', () => App)
agora podemos criar nossa loja.
Em TodosStore.tsx, crie a seguinte classe, pela qual passaremos passo a passo:
- No topo do arquivo, importar
StoreBase
, que é a classe base que ReSub nos dá, e o que vamos estender para criar nossa loja, bem como dois decoradores que irá manter os dados sincronizados (autoSubscribeWithKey
eautoSubscribeStore
). - no topo da classe, criamos duas variáveis: uma matriz
_todos
e uma string_textInputValue
. - o método
updateTextInputValue
receberá um valor de uma entrada de texto e, em seguida, atualizará o_textInputValue
com o valor passado para o método.
depois de fazer isso, chamamosthis.trigger(TriggerKeys.InputTextKey)
que acionará todas as assinaturas que estão assinadas usando o decoradorautoSubscribeWithKey(TriggerKeys.InputTextKey)
, atualizando os componentes que estão usando esses dados com os dados de armazenamento atualizados.
trigger()
está disponível como um método deStoreBase
, que estendemos para criar nossa loja. -
addTodo
primeiro verificará se há um valor a ser adicionado e, se não, retornará sem fazer nada.
caso contrário, pegamos o_textInputValue
existente, bem como o array todos existente, e então criamos um novo array, passando o novo todo como o último item no array.
uma vez que a nova matriz é criada, atualizamos o_textInputValue
para ser uma string vazia e novamente chamamosthis.trigger()
-
getTodos
retorna a lista de_todos
. Adicionamos o decoradorautoSubscribeWithKey(TriggerKeys.TodosChangedKey)
para garantir que, sempre que os dados mudarem, qualquer componente usando esses dados será atualizado. -
getTextInputValue
faz a mesma coisa quegetTodos
não, mas para o_textInputValue
valor
Agora que a loja é completa, vamos criar o último arquivo que iremos usar, o App.tsx.
Há um pouco acontecendo aqui, e eu vou orientá-lo próximo, mas é realmente um muito implementação básica, com algumas coisas que são específicas para ReSub, mais notavelmente eu acho é que estamos estendendo a ComponentBase
classe de ReSub vs Component
classe de Reagir.
- Nós importar as dependências vamos precisar para o arquivo
- criamos um
State
interface, e nele podemos declarar umtodos
array e umtodo
string - gostaríamos de estender o
ComponentBase
classe de Resub, o que nos dá não só o ciclo de vida de métodos que são utilizados no Reagir, mas também alguns outros métodos úteis, nomeadamente_buildState
que é o que vamos usar para amarrar o nosso estado de componente com o estado de armazenamento. Confira os documentos buildState vinculados para saber mais sobre_buildState
, mas basicamente é um método chamado para reconstruir o estado do módulo quando a loja é atualizada. - o resto deste componente são alguns métodos básicos que atualizam a matriz store
todos
, A store_textInputValue
e adicionam algum estilo.
agora no terminal, execute typescript:
npm run build
em seguida, execute o aplicativo React Native em seu emulador, e devemos ver um aplicativo todo funcional!
novamente, o código para este exemplo está localizado aqui.
chamo-me Nader Dabit . Sou um defensor do desenvolvedor no AWS Mobile trabalhando com projetos como AppSync e Amplify, e fundador do React Native Training.
se você gosta de React e React Native, confira nosso podcast-React Native Radio on Devchat.tv.
além disso, confira meu livro, React Native em ação agora disponível na Manning Publications
se você gostou deste artigo, recomende e compartilhe! Obrigado pelo seu tempo
Deixe uma resposta