Create an universal React app
First of all read the whole post, secondly install Create React App globally and create an app using create-react-app my-app, then before any coding add packages to your app. As soon as you finish all package installations you can start coding using my basics code snippets if you need to 🙂
Add main React package to your enviroment
Create React App
npm i -g create-react-app
This will allow you to create React Apps with no build configuration anywhere in your computer.
create-react-app my-app
cd my-app/
npm start
This will create a React App called my-app pointing to http://localhost:3000/, any time you save your files your app will be updated automatically.
Add packages to your React app
Within my-app folder.
Bootstrap
npm i -S bootstrap
npm i -S react-bootstrap
npm i -S react-router-bootstrap
This will allow us to use this front-end framework in a easier way (with React).
For example lets code our home page (home.js)
import React from 'react'; import { Grid, Row, Col, Jumbotron, Image } from 'react-bootstrap'; import people from '../media/people.png'; function Home(props) { const t = props.t; // we will pass the translation function via props return ( <div> <Grid> <Jumbotron> <h1>{t('Open knowledges')}</h1> <p>Cool text right here</p> </Jumbotron> </Grid> <Grid> <Row> <Col lg={12}> <p>I love paragraphs.</p> <p>I love paragraphs.</p> </Col> </Row> <Row> <Col lg={12}> <p>I love paragraphs.</p> <Image className="detached" src={people} responsive /> </Col> </Row> </Grid> </div> ); } export default Home;
Anything that you would use repeatedly in other pages of your website should be in a different file (component), such as the navigation bar and the footer. Create a layout component to organize your components all together (layout.js)
import React, { Component } from 'react'; import Navigation from '../components/Navigation'; import Footer from '../components/Footer'; class Layout extends Component { render() { return ( <div> <Navigation t={this.props.t}></Navigation> {this.props.children} <Footer></Footer> </div> ); } } export default Layout;
React Router
npm i -S react-router
npm i -S react-router-dom
This will make our website’s routing easier.
Let’s create our website/app (index.js) with two pages, for example Home (home.js) and About (about.js)
import React from 'react'; import ReactDOM from 'react-dom'; import { BrowserRouter, Route } from 'react-router-dom'; import './index.css'; import 'bootstrap/dist/css/bootstrap.css'; import 'bootstrap/dist/css/bootstrap-theme.css'; import Layout from './pages/Layout'; import Home from './pages/Home'; import About from './pages/About'; import i18n from './i18n'; let t = i18n.t.bind(i18n); // for translations ReactDOM.render( <BrowserRouter> <div> <Route exact path="/" render={() => <Layout t={t}><Home t={t} /></Layout>} /> <Route exact path="/about" render={() => <Layout t={t}><About t={t} /></Layout>} /> </div> </BrowserRouter>, document.getElementById('root') );
Add i18next package
npm i -S i18next
This will let us do our website/app internationalization.
import i18n from 'i18next'; i18n .init({ fallbackLng: 'en', lng: navigator.language.split('-')[0], debug: true, resources: { en: { translation: { "Hello": "Hola", "Bye": "Adiós" } } } }); export default i18n;
Futher details using i18n in this post: Create a multilingual React website.
How your files structure would look like?
. +-- _components | +-- Footer.css | +-- Footer.js | +-- Navigation.css | +-- Navigation.js +-- _media | +-- logo.svg +-- _pages | +-- Layout.js | +-- Home.js | +-- About.js +-- i18n.js +-- index.css +-- index.js