Skip to content

Commit 5379b0c

Browse files
miljan-aleksicyyx990803
authored andcommitted
add spanish docs translation (#164)
1 parent 0302e85 commit 5379b0c

20 files changed

+1498
-0
lines changed

docs/es/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
SUMMARY.md

docs/es/SUMMARY.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Tabla de contenidos
2+
3+
> Asegúrate de leer estas secciones en orden.
4+
5+
- [Qué es Vuex?](intro.md)
6+
- [Empezando](getting-started.md)
7+
- [Tutorial](tutorial.md)
8+
- Conceptos Básicos
9+
- [Estado y Obtenedores](state.md)
10+
- [Mutaciones](mutations.md)
11+
- [Acciones](actions.md)
12+
- [Flujo de datos](data-flow.md)
13+
- [Estructura de la Aplicación](structure.md)
14+
- [Middlewares](middlewares.md)
15+
- [Modo estricto](strict.md)
16+
- [Manejo de formularios](forms.md)
17+
- [Probando](testing.md)
18+
- [Recarga en caliente](hot-reload.md)
19+
- [Referencia API](api.md)

docs/es/actions.md

Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
# Acciones
2+
3+
> Acciones en Vuex son de hecho "creadores de acción" en las definiciones de vanilla flux, pero encuentro ese término más confuso que útil.
4+
5+
Acciones son simplemente funciones que despachan mutaciones. Por convenio, las acciones de Vuex siempre esperan una instancia del almacén como su primer argumento, seguido por argumentos adicionales opcionales.
6+
7+
``` js
8+
// la acción más simple
9+
function increment (store) {
10+
store.dispatch('INCREMENT')
11+
}
12+
13+
// acción con argumentos adicionales
14+
// usando la destructuración de argumentos del ES2015
15+
function incrementBy ({ dispatch }, amount) {
16+
dispatch('INCREMENT', amount)
17+
}
18+
```
19+
20+
Esto puede parecer tonto a primera vista: ¿Por qué no despachamos las mutaciones directamente? Bien, recuerda que **las mutaciones deben ser síncronas**. Las acciones no. Podemos realizar operaciones **asíncronas** dentro de una acción:
21+
22+
``` js
23+
function incrementAsync ({ dispatch }) {
24+
setTimeout(() => {
25+
dispatch('INCREMENT')
26+
}, 1000)
27+
}
28+
```
29+
30+
Un ejemplo más práctico sería una acción para procesar un carrito de la compra, lo cual involucra **llamar a una API asíncrona** y **despachar múltiples mutaciones**:
31+
32+
``` js
33+
function checkout ({ dispatch, state }, products) {
34+
// guarda los actuales artículos del carrito
35+
const savedCartItems = [...state.cart.added]
36+
// envía la solicitud y con optimismo vacía el carrito
37+
dispatch(types.CHECKOUT_REQUEST)
38+
// el API de la tienda acepta una retrollamada en caso de éxito
39+
// y otra en caso de fallo
40+
shop.buyProducts(
41+
products,
42+
// éxito
43+
() => dispatch(types.CHECKOUT_SUCCESS),
44+
// fallo
45+
() => dispatch(types.CHECKOUT_FAILURE, savedCartItems)
46+
)
47+
}
48+
```
49+
50+
Ten en cuenta que en vez de esperar valores de retorno o pasar retrollamadas a acciones, el resultado de llamar al API asíncrono es también gestionado despachando mutaciones. La regla de oro es que **los únicos efectos secundarios producidos por llamar acciones deberían ser mutaciones despachadas**.
51+
52+
### Llamando acciones en componentes
53+
54+
Puedes haber notado que las funciones asociadas a las acciones no son directamente ejecutables sin la referencia a una instancia del almacén. Técnicamente, podemos invocar una acción llamando `action(this.$store)` dentro de un método, pero es mejor si directamente podemos asignar las acciones como métodos de los componentes para así poder fácilmente referenciarlos dentro de las plantillas. Podemos hacerlo usando la opción `vuex.actions`:
55+
56+
``` js
57+
// dentro del componente
58+
import { incrementBy } from './actions'
59+
60+
const vm = new Vue({
61+
vuex: {
62+
getters: { ... }, // getters del estado
63+
actions: {
64+
incrementBy // abreviación de un objeto literal en ES6, asignación usando el mismo nombre
65+
}
66+
}
67+
})
68+
```
69+
70+
Lo que el código anterior hace es asignar la acción pura `incrementBy` a la instancia del almacén del componente, y exponerlo en el componente como un método de instancia, `vm.incrementBy`. Cualquier argumento pasado a `vm.incrementBy` será pasado a la función de la acción después del primer argumento que es el almacén, así pues:
71+
72+
``` js
73+
vm.incrementBy(1)
74+
```
75+
76+
es equivalente a:
77+
78+
``` js
79+
incrementBy(vm.$store, 1)
80+
```
81+
82+
Pero la ventaja es que se puede asignar más fácilmente dentro de la plantilla del componente:
83+
84+
``` html
85+
<button v-on:click="incrementBy(1)">incrementar por uno</button>
86+
```
87+
88+
Puedes obviamente usar un nombre de método diferente cuando asignes las acciones:
89+
90+
``` js
91+
// dentro del componente
92+
import { incrementBy } from './actions'
93+
94+
const vm = new Vue({
95+
vuex: {
96+
getters: { ... },
97+
actions: {
98+
plus: incrementBy // asignar usando un nombre diferente
99+
}
100+
}
101+
})
102+
```
103+
104+
Ahora la acción será asignada como `vm.plus` en vez de `vm.incrementBy`.
105+
106+
### Acciones en línea
107+
108+
Si la acción es específica del componente, puedes usar un atajo y definirla en línea:
109+
110+
``` js
111+
const vm = new Vue({
112+
vuex: {
113+
getters: { ... },
114+
actions: {
115+
plus: ({ dispatch }) => dispatch('INCREMENT')
116+
}
117+
}
118+
})
119+
```
120+
121+
### Asignando todas las acciones
122+
123+
Si simplemente quieres asignar todas las acciones compartidas:
124+
125+
``` js
126+
import * as actions from './actions'
127+
128+
const vm = new Vue({
129+
vuex: {
130+
getters: { ... },
131+
actions // asignar todas las acciones
132+
}
133+
})
134+
```

docs/es/api.md

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
# Referencia API
2+
3+
### Vuex.Store
4+
5+
``` js
6+
import Vuex from 'vuex'
7+
8+
const store = new Vuex.Store({ ...options })
9+
```
10+
11+
### Opciones de construcción de Vuex.Store
12+
13+
- **state**
14+
15+
- tipo: `Object`
16+
17+
El objeto de estado raíz para el almacén Vuex.
18+
19+
[Detalles](state.md)
20+
21+
- **mutations**
22+
23+
- tipo: `Object`
24+
25+
Un objeto en el que cada clave de entrada es el nombre de la mutación y el valor es una función de controlador de mutación. La función de controlador recibe siempre `state` como primer argumento, y seguido recibe todos los argumentos que se pasan a la llamada de despacho.
26+
27+
[Detalles](mutations.md)
28+
29+
- **modules**
30+
31+
- tipo: `Object`
32+
33+
Un objeto que contiene submódulos a combinar en el almacén, en la forma de:
34+
35+
``` js
36+
{
37+
key: {
38+
state,
39+
mutations
40+
},
41+
...
42+
}
43+
```
44+
45+
Cada módulo puede contener `state` y `mutations` similares a las opciones raíz. El estado del módulo se une al estado raíz del almacén usando las claves del módulo. Las mutaciones de un módulo sólo reciben el estado propio del módulo como primer argumento en lugar del estado raíz.
46+
47+
- **middlewares**
48+
49+
- tipo: `Array<Object>`
50+
51+
Un conjunto de objetos de middleware que se encuentran en la forma de:
52+
53+
``` js
54+
{
55+
snapshot: Boolean, // por defecto: false
56+
onInit: Function,
57+
onMutation: Function
58+
}
59+
```
60+
61+
Todos los campos son opcionales. [Detalles](middlewares.md)
62+
63+
- **strict**
64+
65+
- tipo: `Boolean`
66+
- por defecto: `false`
67+
68+
Fuerza el almacén Vuex a modo estricto. En modo estricto cualquier mutación al estado de Vuex fuera de los manipuladores de mutación generará un error.
69+
70+
[Detalles](strict.md)
71+
72+
### Propiedades de instancia del Vuex.Store
73+
74+
- **state**
75+
76+
- tipo: `Object`
77+
78+
El estado raíz. De sólo lectura.
79+
80+
### Métodos de instancia de Vuex.Store
81+
82+
- **dispatch(mutationName: String, ...args) | dispatch(mutation: Object)**
83+
84+
Directamente despachar una mutación. Esto es útil en ciertas situaciones, pero en general deberías preferir el uso de acciones en el código de la aplicación.
85+
86+
*Object-Style Dispatch*
87+
88+
> requiere >=0.6.2
89+
90+
También puedes despachar mutaciones utilizando objetos:
91+
92+
``` js
93+
store.dispatch({
94+
type: 'INCREMENT',
95+
payload: 10
96+
})
97+
```
98+
99+
- **watch(pathOrGetter: String|Function, cb: Function, [options: Object])**
100+
101+
Observa una ruta o el valor de una función obtenedor, y llamar a la retrollamada cuando el valor cambia. Acepta un objeto opcional de opciones que tiene las mismas opciones como el método `vm.$watch` de Vue.
102+
103+
Para dejar de observar, llamar a la función de manipulación devuelto.
104+
105+
- **hotUpdate(newOptions: Object)**
106+
107+
Intercambio en caliente de nuevas acciones y mutaciones. [Detalles](hot-reload.md)

docs/es/book.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../book.json

docs/es/data-flow.md

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
# Flujo de datos
2+
3+
Construyamos una app contador simple con Vuex para obtener una mejor comprensión del flujo de datos dentro de aplicaciones Vuex. Ten en cuenta que este es un ejemplo trivial con el único fin de explicar los conceptos - en la práctica no necesitas Vuex para tareas tan sencillas.
4+
5+
### El almacén
6+
7+
``` js
8+
// store.js
9+
import Vue from 'vue'
10+
import Vuex from 'vuex'
11+
12+
Vue.use(Vuex)
13+
14+
// estado inicial del app
15+
const state = {
16+
count: 0
17+
}
18+
19+
// define posibles mutaciones
20+
const mutations = {
21+
INCREMENT (state) {
22+
state.count++
23+
},
24+
DECREMENT (state) {
25+
state.count--
26+
}
27+
}
28+
29+
// crea el almacén
30+
export default new Vuex.Store({
31+
state,
32+
mutations
33+
})
34+
```
35+
36+
### Acciones
37+
38+
``` js
39+
// actions.js
40+
export const increment = ({ dispatch }) => dispatch('INCREMENT')
41+
export const decrement = ({ dispatch }) => dispatch('DECREMENT')
42+
```
43+
44+
### Usalo con Vue
45+
46+
**Plantilla**
47+
48+
``` html
49+
<div id="app">
50+
Tocado: {{ count }} veces
51+
<button v-on:click="increment">+</button>
52+
<button v-on:click="decrement">-</button>
53+
</div>
54+
```
55+
56+
**Script**
57+
58+
``` js
59+
// Estamos importando e inyectando el almacén aquí porque
60+
// esta es la raíz. En aplicaciones más grandes esto lo haces sólo una vez.
61+
import store from './store'
62+
import { increment, decrement } from './actions'
63+
64+
const app = new Vue({
65+
el: '#app',
66+
store,
67+
vuex: {
68+
getters: {
69+
count: state => state.count
70+
},
71+
actions: {
72+
increment,
73+
decrement
74+
}
75+
}
76+
})
77+
```
78+
79+
Aquí te darás cuenta que el componente en sí es muy sencillo: simplemente muestra un estado del almacén Vuex (ni siquiera tiene datos propios), y llama a algunas acciones de almacén basado en eventos de entrada de usuario.
80+
81+
También te darás cuenta que el flujo de datos es unidireccional, como debería ser en Flux:
82+
83+
1. Entrada de usuario en el componente desencadena llamadas de acción;
84+
2. Acciones despachan mutaciones que cambian el estado;
85+
3. Cambios en el flujo de estado desde el almacén de vuelta al componente mediante obtenedores.
86+
87+
<p align="center">
88+
<img width="700px" src="vuex.png">
89+
</p>

0 commit comments

Comments
 (0)