Reactjs
Reactjs
ReactJS - Inicio
ReactJS - Descripción general
ReactJS - Configuración del entorno
ReactJS - JSX
ReactJS - Componentes
ReactJS - Estado
ReactJS - Resumen de accesorios
ReactJS - Validación de accesorios
ReactJS - API de componentes
ReactJS - Ciclo de vida del componente
ReactJS - Formularios
ReactJS - Eventos
ReactJS - Refs
ReactJS - Keys
ReactJS - Enrutador
ReactJS - Concepto de flujo
ReactJS - Usando Flux
ReactJS - Animaciones
ReactJS - Componentes de orden superior
ReactJS - Mejores práctica
ReactJS - Descripción general
Ventajas de reacción
Utiliza DOM virtual que es un objeto de JavaScript. Esto mejorará el rendimiento
de las aplicaciones, ya que el DOM virtual de JavaScript es más rápido que el
DOM normal.
Se puede usar en el lado del cliente y del servidor, así como con otros marcos.
Los patrones de componentes y datos mejoran la legibilidad, lo que ayuda a
mantener aplicaciones más grandes.
Limitaciones de reacción
Cubre solo la capa de vista de la aplicación, por lo tanto, aún debe elegir otras
tecnologías para obtener un conjunto completo de herramientas para el
desarrollo.
Utiliza plantillas en línea y JSX, lo que puede parecer incómodo para algunos
desarrolladores.
No Software y descripción
Señor.
1
NodeJS y NPM
NodeJS es la plataforma necesaria para el desarrollo de
ReactJS. Consulte nuestra configuración del entorno NodeJS .
Cree una carpeta con el nombre reactApp en el escritorio para instalar todos
los archivos necesarios, utilizando el comando mkdir.
C:\Users\username\Desktop>mkdir reactApp
C:\Users\username\Desktop>cd reactApp
Para crear cualquier módulo, es necesario generar
el archivo package.json . Por lo tanto, después de crear la carpeta,
necesitamos crear un archivo package.json . Para hacerlo, debe ejecutar
el comando npm init desde el símbolo del sistema.
C:\Users\username\Desktop\reactApp>npm init
Este comando solicita información sobre el módulo, como el nombre del
paquete, la descripción, el autor, etc. Puede omitirlos utilizando la opción –y.
C:\Users\username\Desktop\reactApp>npm init -y
Wrote to C:\reactApp\package.json:
{
"name": "reactApp",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
Dado que nuestra tarea principal es instalar ReactJS, instálelo y sus paquetes
dom, usando los comandos install react y react-dom de npm
respectivamente. Puede agregar los paquetes que instalamos
al archivo package.json usando la opción --save .
C:\Users\Tutorialspoint\Desktop\reactApp>npm install react --
save
C:\Users\Tutorialspoint\Desktop\reactApp>npm install react-
dom --save
O bien, puede instalarlos todos en un solo comando como:
C:\Users\username\Desktop\reactApp>npm install react react-
dom --save
module.exports = {
entry: './main.js',
output: {
path: path.join(__dirname, '/bundle'),
filename: 'index_bundle.js'
},
devServer: {
inline: true,
port: 8001
},
module: {
rules: [
{
test: /\.jsx?$/,
exclude: /node_modules/,
loader: 'babel-loader',
query: {
presets: ['es2015', 'react']
}
}
]
},
plugins:[
new HtmlWebpackPlugin({
template: './index.html'
})
]
}
Abra la package.json y borrar "prueba" "echo \" Error: ninguna prueba
especifica \" && salida 1" interior 'guiones' objeto. Estamos eliminando esta
línea ya que no haremos ninguna prueba en este tutorial. Agreguemos
los comandos de inicio y compilación en su lugar.
"start": "webpack-dev-server --mode development --open --
hot",
"build": "webpack --mode production"
Paso 7 - index.html
ReactJS - JSX
React usa JSX para crear plantillas en lugar de JavaScript normal. No es
necesario usarlo, sin embargo, a continuación hay algunos pros que vienen
con él.
Es más rápido porque realiza la optimización al compilar código en JavaScript.
También es de tipo seguro y la mayoría de los errores pueden detectarse durante
la compilación.
Hace que sea más fácil y rápido escribir plantillas, si está familiarizado con HTML.
Usando JSX
JSX parece un HTML normal en la mayoría de los casos. Ya lo usamos en el
capítulo Configuración del entorno. Mire el código
de App.jsx donde devolvemos div .
App.jsx
import React from 'react';
Elementos anidados
Si queremos devolver más elementos, necesitamos envolverlo con un
elemento contenedor. Observe cómo estamos usando div como envoltorio
para los elementos h1 , h2 y p .
App.jsx
Expresiones JavaScript
Las expresiones de JavaScript se pueden usar dentro de JSX. Solo
necesitamos envolverlo con llaves {} . El siguiente ejemplo representará 2 .
import React from 'react';
Estilo
React recomienda usar estilos en línea. Cuando queremos establecer estilos
en línea, necesitamos usar la sintaxis camelCase . React también
agregará px automáticamente después del valor numérico en elementos
específicos. El siguiente ejemplo muestra cómo agregar myStyle en línea
al elemento h1 .
import React from 'react';
Comentarios
Cuando escribimos comentarios, necesitamos poner llaves {} cuando
queremos escribir comentarios dentro de la sección secundaria de una
etiqueta. Es una buena práctica usar siempre {} al escribir comentarios, ya que
queremos ser coherentes al escribir la aplicación.
import React from 'react';
Convenio de denominación
Las etiquetas HTML siempre usan nombres de etiquetas en minúsculas ,
mientras que los componentes React comienzan con mayúsculas .
Nota : debe usar className y htmlFor como nombres de atributos XML en
lugar de class y for .
Esto se explica en la página oficial de React como:
Como JSX es JavaScript, los identificadores como class y for no se
recomiendan como nombres de atributos XML. En cambio, los componentes
React DOM esperan nombres de propiedad DOM
como className y htmlFor , respectivamente.
ReactJS - Componentes
En este capítulo, aprenderemos cómo combinar componentes para que la
aplicación sea más fácil de mantener. Este enfoque permite actualizar y
cambiar sus componentes sin afectar el resto de la página.
App.jsx
App.jsx
main.js
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.jsx';
ReactDOM.render(<App/>, document.getElementById('app'));
Nota : tenga en cuenta que estamos usando la tecla = {i} dentro de la
función map () . Esto ayudará a React a actualizar solo los elementos
necesarios en lugar de volver a representar la lista completa cuando algo
cambie. Es un gran aumento de rendimiento para un mayor número de
elementos creados dinámicamente.
ReactJS - Estado
El estado es el lugar de donde provienen los datos. Siempre debemos tratar
de hacer que nuestro estado sea lo más simple posible y minimizar la cantidad
de componentes con estado. Si tenemos, por ejemplo, diez componentes que
necesitan datos del estado, deberíamos crear un componente contenedor que
mantenga el estado de todos ellos.
Usando estado
El siguiente código de muestra muestra cómo crear un componente con
estado utilizando la sintaxis EcmaScript2016.
App.jsx
this.state = {
header: "Header from state...",
content: "Content from state..."
}
}
render() {
return (
<div>
<h1>{this.state.header}</h1>
<h2>{this.state.content}</h2>
</div>
);
}
}
export default App;
main.js
Usando accesorios
Cuando necesitamos datos inmutables en nuestro componente, podemos
agregar accesorios a la función reactDOM.render () en main.js y usarlos
dentro de nuestro componente.
App.jsx
main.js
Atrezzo predeterminado
También puede establecer valores de propiedad predeterminados
directamente en el constructor del componente en lugar de agregarlo
al elemento reactDom.render () .
App.jsx
main.js
ReactDOM.render(<App/>, document.getElementById('app'));
Estado y accesorios
El siguiente ejemplo muestra cómo combinar estado y accesorios en su
aplicación. Estamos configurando el estado en nuestro componente principal y
pasándolo al árbol de componentes usando accesorios . En el interior
del render función, estamos
estableciendo headerProp y contentProp utilizado en componentes hijos.
App.jsx
main.js
ReactDOM.render(<App/>, document.getElementById('app'));
Validar accesorios
En este ejemplo, estamos creando un componente de aplicación con todos
los accesorios que necesitamos. App.propTypes se usa para la validación
de accesorios. Si algunos de los accesorios no usan el tipo correcto que
asignamos, recibiremos una advertencia de la consola. Después de
especificar los patrones de validación, configuraremos App.defaultProps .
App.jsx
App.propTypes = {
propArray: React.PropTypes.array.isRequired,
propBool: React.PropTypes.bool.isRequired,
propFunc: React.PropTypes.func,
propNumber: React.PropTypes.number,
propString: React.PropTypes.string,
propObject: React.PropTypes.object
}
App.defaultProps = {
propArray: [1,2,3,4,5],
propBool: true,
propFunc: function(e){return e},
propNumber: 1,
propString: "String value...",
propObject: {
objectName1:"objectValue1",
objectName2: "objectValue2",
objectName3: "objectValue3"
}
}
export default App;
main.js
ReactDOM.render(<App/>, document.getElementById('app'));
ReactJS - API de componentes
En este capítulo, explicaremos la API del componente React. Discutiremos
tres métodos: setState (), forceUpdate y ReactDOM.findDOMNode () . En
las nuevas clases de ES6, tenemos que vincular esto
manualmente. Usaremos this.method.bind (this) en los ejemplos.
Establecer estado
El método setState () se utiliza para actualizar el estado del componente. Este
método no reemplazará el estado, sino que solo agregará cambios al estado
original.
import React from 'react';
this.state = {
data: []
}
this.setStateHandler = this.setStateHandler.bind(this);
};
setStateHandler() {
var item = "setState..."
var myArray = this.state.data.slice();
myArray.push(item);
this.setState({data: myArray})
};
render() {
return (
<div>
<button onClick = {this.setStateHandler}>SET
STATE</button>
<h4>State Array: {this.state.data}</h4>
</div>
);
}
}
export default App;
Comenzamos con una matriz vacía. Cada vez que hacemos clic en el botón, el
estado se actualizará. Si hacemos clic cinco veces, obtendremos el siguiente
resultado.
Actualización de fuerza
A veces es posible que queramos actualizar el componente
manualmente. Esto se puede lograr usando el método forceUpdate () .
import React from 'react';
App.jsx
this.state = {
data: 0
}
this.setNewNumber = this.setNewNumber.bind(this)
};
setNewNumber() {
this.setState({data: this.state.data + 1})
}
render() {
return (
<div>
<button onClick =
{this.setNewNumber}>INCREMENT</button>
<Content myNumber = {this.state.data}></Content>
</div>
);
}
}
class Content extends React.Component {
componentWillMount() {
console.log('Component WILL MOUNT!')
}
componentDidMount() {
console.log('Component DID MOUNT!')
}
componentWillReceiveProps(newProps) {
console.log('Component WILL RECIEVE PROPS!')
}
shouldComponentUpdate(newProps, newState) {
return true;
}
componentWillUpdate(nextProps, nextState) {
console.log('Component WILL UPDATE!');
}
componentDidUpdate(prevProps, prevState) {
console.log('Component DID UPDATE!')
}
componentWillUnmount() {
console.log('Component WILL UNMOUNT!')
}
render() {
return (
<div>
<h3>{this.props.myNumber}</h3>
</div>
);
}
}
export default App;
main.js
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.jsx';
ReactDOM.render(<App/>, document.getElementById('app'));
setTimeout(() => {
ReactDOM.unmountComponentAtNode(document.getElementById('app'
));}, 10000);
ReactJS - Formularios
En este capítulo, aprenderemos cómo usar formularios en React.
Ejemplo simple
En el siguiente ejemplo, estableceremos un formulario de entrada con valor =
{this.state.data} . Esto permite actualizar el estado cada vez que cambia el
valor de entrada. Estamos utilizando el evento onChange que observará los
cambios de entrada y actualizará el estado en consecuencia.
App.jsx
this.state = {
data: 'Initial data...'
}
this.updateState = this.updateState.bind(this);
};
updateState(e) {
this.setState({data: e.target.value});
}
render() {
return (
<div>
<input type = "text" value = {this.state.data}
onChange = {this.updateState} />
<h4>{this.state.data}</h4>
</div>
);
}
}
export default App;
main.js
ReactDOM.render(<App/>, document.getElementById('app'));
Cuando el valor del texto de entrada cambia, el estado se actualizará.
Ejemplo complejo
En el siguiente ejemplo, veremos cómo usar formularios del componente
hijo. El método onChange activará la actualización de estado que se pasará
al valor de entrada secundario y se representará en la pantalla. Un ejemplo
similar se utiliza en el capítulo Eventos. Siempre que necesitemos actualizar el
estado del componente secundario, debemos pasar la función que manejará la
actualización ( updateState ) como un accesorio ( updateStateProp ).
App.jsx
this.state = {
data: 'Initial data...'
}
this.updateState = this.updateState.bind(this);
};
updateState(e) {
this.setState({data: e.target.value});
}
render() {
return (
<div>
<Content myDataProp = {this.state.data}
updateStateProp =
{this.updateState}></Content>
</div>
);
}
}
class Content extends React.Component {
render() {
return (
<div>
<input type = "text" value =
{this.props.myDataProp}
onChange = {this.props.updateStateProp} />
<h3>{this.props.myDataProp}</h3>
</div>
);
}
}
export default App;
main.js
ReactDOM.render(<App/>, document.getElementById('app'));
ReactJS - Eventos
En este capítulo, aprenderemos cómo usar eventos.
Ejemplo simple
Este es un ejemplo simple donde solo usaremos un componente. Solo
estamos agregando el evento onClick que activará
la función updateState una vez que se haga clic en el botón.
App.jsx
this.state = {
data: 'Initial data...'
}
this.updateState = this.updateState.bind(this);
};
updateState() {
this.setState({data: 'Data updated...'})
}
render() {
return (
<div>
<button onClick =
{this.updateState}>CLICK</button>
<h4>{this.state.data}</h4>
</div>
);
}
}
export default App;
main.js
ReactDOM.render(<App/>, document.getElementById('app'));
Eventos infantiles
Cuando necesitamos actualizar el estado del componente primario desde su
elemento secundario, podemos crear un controlador de eventos
( updateState ) en el componente primario y pasarlo como un accesorio
( updateStateProp ) al componente secundario donde simplemente podemos
llamarlo.
App.jsx
this.state = {
data: 'Initial data...'
}
this.updateState = this.updateState.bind(this);
};
updateState() {
this.setState({data: 'Data updated from the child
component...'})
}
render() {
return (
<div>
<Content myDataProp = {this.state.data}
updateStateProp =
{this.updateState}></Content>
</div>
);
}
}
class Content extends React.Component {
render() {
return (
<div>
<button onClick =
{this.props.updateStateProp}>CLICK</button>
<h3>{this.props.myDataProp}</h3>
</div>
);
}
}
export default App;
main.js
ReactDOM.render(<App/>, document.getElementById('app'));
Esto producirá el siguiente resultado.
ReactJS - Refs
La referencia se usa para devolver una referencia al elemento. Las
referencias deben evitarse en la mayoría de los casos, sin embargo, pueden
ser útiles cuando necesitamos mediciones DOM o para agregar métodos a los
componentes.
Usando referencias
El siguiente ejemplo muestra cómo usar referencias para borrar el campo de
entrada. La función ClearInput busca el elemento con el valor ref =
"myInput" , restablece el estado y le agrega foco después de hacer clic en el
botón.
App.jsx
this.state = {
data: ''
}
this.updateState = this.updateState.bind(this);
this.clearInput = this.clearInput.bind(this);
};
updateState(e) {
this.setState({data: e.target.value});
}
clearInput() {
this.setState({data: ''});
ReactDOM.findDOMNode(this.refs.myInput).focus();
}
render() {
return (
<div>
<input value = {this.state.data} onChange =
{this.updateState}
ref = "myInput"></input>
<button onClick =
{this.clearInput}>CLEAR</button>
<h4>{this.state.data}</h4>
</div>
);
}
}
export default App;
main.js
ReactDOM.render(<App/>, document.getElementById('app'));
Una vez que se hace clic en el botón, la entrada se borrará y se enfocará.
ReactJS - Keys
Las claves de reacción son útiles cuando se trabaja con componentes
creados dinámicamente o cuando los usuarios alteran sus listas. Establecer
el valor clave mantendrá sus componentes identificados de forma única
después del cambio.
Usando llaves
Creemos dinámicamente elementos de contenido con índice único
(i). La función de mapa creará tres elementos de nuestra matriz
de datos . Como el valor de la clave debe ser único para cada elemento,
asignaremos i como clave para cada elemento creado.
App.jsx
main.js
ReactDOM.render(<App/>, document.getElementById('app'));
Obtendremos el siguiente resultado para los valores clave de cada elemento.
Si agregamos o eliminamos algunos elementos en el futuro o cambiamos el
orden de los elementos creados dinámicamente, React usará
los valores clave para realizar un seguimiento de cada elemento.
ReactJS - Enrutador
En este capítulo, aprenderemos cómo configurar el enrutamiento para una
aplicación.
main.js
main.js
ReactDOM.render((
<Router history = {browserHistory}>
<Route path = "/" component = {App}>
<IndexRoute component = {Home} />
<Route path = "home" component = {Home} />
<Route path = "about" component = {About} />
<Route path = "contact" component = {Contact} />
</Route>
</Router>
), document.getElementById('app'))
Cuando se inicia la aplicación, veremos tres enlaces en los que se puede
hacer clic que se pueden usar para cambiar la ruta.
Elementos de flujo
A continuación hay una explicación simple del concepto de flujo . En el
próximo capítulo, aprenderemos cómo implementar esto en la aplicación.
Acciones : las acciones se envían al despachador para activar el flujo de datos.
Despachador : este es un centro central de la aplicación. Todos los datos se
envían y se envían a las tiendas.
Store - Store es el lugar donde se guardan el estado y la lógica de la
aplicación. Cada tienda mantiene un estado particular y se actualizará cuando sea
necesario.
Ver : la vista recibirá datos de la tienda y volverá a representar la aplicación.
El flujo de datos se representa en la siguiente imagen.
Flux Pros
El flujo de datos direccional único es fácil de entender.
La aplicación es más fácil de mantener.
Las partes de la aplicación están desacopladas.
Paso 3 - Acciones
Las acciones son objetos de JavaScript que utilizan la propiedad de tipo para
informar sobre los datos que deben enviarse a la tienda. Estamos definiendo
la acción ADD_TODO que se usará para agregar un nuevo elemento a
nuestra lista. La función addTodo es un creador de acciones que devuelve
nuestra acción y establece una identificación para cada elemento creado.
actions / actions.js
let nextTodoId = 0;
Paso 4 - Reductores
Si bien las acciones solo desencadenan cambios en la aplicación,
los reductores especifican esos cambios. Estamos utilizando
la instrucción switch para buscar una acción ADD_TODO . El reductor es una
función que toma dos parámetros ( estado y acción ) para calcular y devolver
un estado actualizado.
La primera función se usará para crear un nuevo elemento, mientras que la
segunda empujará ese elemento a la lista. Hacia el final, estamos utilizando
la función de ayuda combineReducers donde podemos agregar cualquier
nuevo reductor que podamos usar en el futuro.
reductores / reductores.js
Paso 5 - Almacenar
La tienda es un lugar que contiene el estado de la aplicación. Es muy fácil
crear una tienda una vez que tenga reductores. Estamos pasando la
propiedad de la tienda al elemento proveedor , que envuelve nuestro
componente de ruta.
main.js
render(
<Provider store = {store}>
<App />
</Provider>,
rootElement
)
App.jsx
return (
<div>
<AddTodo onAddClick = {text
=>dispatch(addTodo(text))} />
<TodoList todos = {visibleTodos}/>
</div>
)
}
}
function select(state) {
return {
visibleTodos: state.todos
}
}
export default connect(select)(App);
componentes / AddTodo.js
componentes / Todo.js
componentes / TodoList.js
ReactJS - Animaciones
En este capítulo, aprenderemos cómo animar elementos usando React.
App.jsx
<h1>My Element...</h1>
</ReactCSSTransitionGroup>
</div>
);
}
}
export default App;
main.js
App.jsx
this.state = {
items: ['Item 1...', 'Item 2...', 'Item 3...', 'Item
4...']
}
this.handleAdd = this.handleAdd.bind(this);
};
handleAdd() {
var newItems = this.state.items.concat([prompt('Create
New Item')]);
this.setState({items: newItems});
}
handleRemove(i) {
var newItems = this.state.items.slice();
newItems.splice(i, 1);
this.setState({items: newItems});
}
render() {
var items = this.state.items.map(function(item, i) {
return (
<div key = {item} onClick =
{this.handleRemove.bind(this, i)}>
{item}
</div>
);
}.bind(this));
return (
<div>
<button onClick = {this.handleAdd}>Add
Item</button>
<ReactCSSTransitionGroup transitionName =
"example"
transitionEnterTimeout = {500}
transitionLeaveTimeout = {500}>
{items}
</ReactCSSTransitionGroup>
</div>
);
}
}
export default App;
main.js
css / style.css
.example-enter {
opacity: 0.04;
}
.example-enter.example-enter-active {
opacity: 5;
transition: opacity 50s ease-in;
}
.example-leave {
opacity: 1;
}
.example-leave.example-leave-active {
opacity: 0.04;
transition: opacity 50s ease-in;
}
Cuando iniciamos la aplicación y hacemos clic en el botón Agregar
elemento , aparecerá el mensaje.
var newData = {
data: 'Data from HOC...',
}