React & Redux 2
Bu başlığımızda React tarafına değinelim. Herşeyi kendimiz sıfırdan yapacağız.
Öncelikle daha öncededn oluşturduğumuz index.html sayfasında react tarafından render edilecek bölümü oluşturalım.
App id li div sürekli reac tarafından manipüle edilecek aslında klasi javaScript gibi :)
Anadizinimizde client klasörünü oluşturalım ve içine index.js dosyamızı oluşturalım.
kodları index.js içine yazıyorum.
Şimdi components klasörünü oluşturup App componentini oluşturmam lazım.
Burada function base diye tabir edilen bir fonksiton component oluşturduk.
şimdi npm modullerimi indiriyorum
npm install --save react react-dom
Şimdi Html pageme kodlarımı bundle edecek sistem lazım. index.htm sayfama geliyorum ve
<script src ="bundle.js"> yazıyorum. Webpack aracılığı ile bütün şeyleri bundle edeceğim.
index.html imin son hali.
Express serverıma webpack ekliyorum. Aslında buradaki configure işlemleri biraz ezber.
import webpack from 'webpack';
import webpackMiddleware from 'webpack-dev-middleware';
import webpackConfig from '../webpack.config.dev'; //Root folderdan alıyoruz.
app.use(webpackMiddleware(webpack(webpackConfig))) Middleware parametre olarak compiler istiyor.
Yukarıdada belirtiğim gibi root dizine webpack.config.dev dosyasını oluşturuyorum;
import path from 'path'
import webpack from 'webpack';
export default {
devtools: 'eval-source-map',
entry: [
'webpack-hot-middleware/client',
path.join(__dirname, '/client/index.js')
],
output: {
path: '/',
publicPath: '/'
},
plugins: [
new webpack.NoErrorsPlugin(),
new webpack.optimize.OccurenceOrderPlugin(),
new webpack.HotModuleReplacementPlugin()
],
module: {
loaders: [
{
test: /\.js$/,
include: [
path.join(__dirname, 'client'),
path.join(__dirname, 'server/shared')
],
loaders: [ 'react-hot', 'babel' ]
}
]
},
resolve: {
extentions: [ '', '.js' ]
}
}
npm install --save webpack webpack-dev-middleware
npm install --save babel-loader
bablrc dosyamı
düzenliyorum ve
npm install --save-dev babel-preset-react
Sunucumuzun hotreolading de yapması lazım. Yani herhangibi değişiklik olduğunda sayfayı yenilemeden değişikliklerin tarayıcıya yansıması bunun için index.js deki değişiklikler şu şekilde:
Bütün webpackMiddlewares ler browser ile wepback arasında bağlantı yaratmaya yarar.
npm install --save-dev react-hot-loader
webpack-hot-middleware
Yaptıktan sonra sitemiz çalışması gerekiyor.
Son olarak packpage dosyam.
ikinci loaders den reactı kaldırdım. Artık anlık değişimlerle ilgiliydi bir hata yaşadık şimdilik gerek yok zaten.
App.js dosyam method base componenti yani kodlarımda herhangibi bir değişiklik olduğunda sayfayı yenilemeden sayfam yenilenmiycek.Eğer class base olsaydı render methodumda herhangibi bir değişiklik olduğunda sayfamı yenilemeden sayfam yenilenecek.
Şimdi App.js dosyamı class component haline getirelim ;
React.Component den component classımı türettim. Şuanlık loaders 'im sıkıntılı olduğu için değişiklikler otomatik gelmedi normalde class komponentlerde save ettiğimiz zaman gelmesi gerekir.
Şimdi App.js componentimizden başkar bir component çağıralım. Greetings componentini çağırıyorum.
Şimdi Greetings componentimi tasarlıyorum. Top yani en üst componentiminin class base olmalı onun altındaki componentler method base olabilir.
Ekranda sadece hi gözükmeli. Bu dersimiz buraya kadar :)
Öncelikle daha öncededn oluşturduğumuz index.html sayfasında react tarafından render edilecek bölümü oluşturalım.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Page Title</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" type="text/css" media="screen" href="main.css" />
<script src="main.js"></script>
</head>
<body>
<div id="app"></div>
</body>
</html>
Anadizinimizde client klasörünü oluşturalım ve içine index.js dosyamızı oluşturalım.
import React from 'react';
import { render } from 'react-render';
import App from './components/App';
render(<App />, document.getElementById('app'));
Şimdi components klasörünü oluşturup App componentini oluşturmam lazım.
import React from 'react';
export default () => {
return (
<h1> Thats class base React Component </h1>
)
}
şimdi npm modullerimi indiriyorum
npm install --save react react-dom
Şimdi Html pageme kodlarımı bundle edecek sistem lazım. index.htm sayfama geliyorum ve
<script src ="bundle.js"> yazıyorum. Webpack aracılığı ile bütün şeyleri bundle edeceğim.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Page Title</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" type="text/css" media="screen" href="main.css" />
<script src="main.js"></script>
</head>
<body>
<div id="app"></div>
<script src="bundle.js"></script>
</body>
</html>
Express serverıma webpack ekliyorum. Aslında buradaki configure işlemleri biraz ezber.
import webpack from 'webpack';
import webpackMiddleware from 'webpack-dev-middleware';
import webpackConfig from '../webpack.config.dev'; //Root folderdan alıyoruz.
app.use(webpackMiddleware(webpack(webpackConfig))) Middleware parametre olarak compiler istiyor.
import express from 'express';
import path from 'path';
import webpack from 'webpack';
import webpackMiddleware from 'webpack-dev-middleware';
import webpackConfig from '../webpack.config.dev';
const app = express();
app.use(webpackMiddleware(webpack(webpackConfig)));
app.get('/*',(req, res) => {
res.sendFile(path.join(__dirname, './index.html'))
});
app.listen(3000, ()=> console.log('Localhost 3000 on running'));
import path from 'path'
import webpack from 'webpack';
export default {
devtools: 'eval-source-map',
entry: [
'webpack-hot-middleware/client',
path.join(__dirname, '/client/index.js')
],
output: {
path: '/',
publicPath: '/'
},
plugins: [
new webpack.NoErrorsPlugin(),
new webpack.optimize.OccurenceOrderPlugin(),
new webpack.HotModuleReplacementPlugin()
],
module: {
loaders: [
{
test: /\.js$/,
include: [
path.join(__dirname, 'client'),
path.join(__dirname, 'server/shared')
],
loaders: [ 'react-hot', 'babel' ]
}
]
},
resolve: {
extentions: [ '', '.js' ]
}
}
npm install --save webpack webpack-dev-middleware
npm install --save babel-loader
bablrc dosyamı
{
"presets":["es2015","react"]
}
npm install --save-dev babel-preset-react
Sunucumuzun hotreolading de yapması lazım. Yani herhangibi değişiklik olduğunda sayfayı yenilemeden değişikliklerin tarayıcıya yansıması bunun için index.js deki değişiklikler şu şekilde:
Bütün webpackMiddlewares ler browser ile wepback arasında bağlantı yaratmaya yarar.
npm install --save-dev react-hot-loader
webpack-hot-middleware
Yaptıktan sonra sitemiz çalışması gerekiyor.
{
"name": "reactreduxtutorial",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"server": "nodemon --watch server --exec babel-node -- server/index.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"babel-cli": "^6.10.1",
"babel-loader": "^6.2.4",
"babel-preset-es2015": "^6.9.0",
"babel-preset-react": "^6.5.0",
"nodemon": "^1.9.2",
"react-hot-loader": "^4.3.6",
"webpack": "^1.13.1",
"webpack-dev-middleware": "^1.6.1",
"webpack-hot-middleware": "^2.10.0"
},
"dependencies": {
"express": "^4.16.3",
"react": "^16.5.0",
"react-dom": "^16.5.0"
}
}
import path from 'path'
import webpack from 'webpack';
export default {
devtools: 'eval-source-map',
entry: [
'webpack-hot-middleware/client',
path.join(__dirname, '/client/index.js')
],
output: {
path: '/',
publicPath: '/'
},
plugins: [
new webpack.NoErrorsPlugin(),
new webpack.optimize.OccurenceOrderPlugin(),
new webpack.HotModuleReplacementPlugin()
],
module: {
loaders: [
{
test: /\.js$/,
include: [
path.join(__dirname, 'client'),
path.join(__dirname, 'server/shared')
],
loaders: [ 'babel' ]
}
]
},
resolve: {
extentions: [ '', '.js' ]
}
}
App.js dosyam method base componenti yani kodlarımda herhangibi bir değişiklik olduğunda sayfayı yenilemeden sayfam yenilenmiycek.Eğer class base olsaydı render methodumda herhangibi bir değişiklik olduğunda sayfamı yenilemeden sayfam yenilenecek.
Şimdi App.js dosyamı class component haline getirelim ;
import React from 'react';
class App extends React.Component {
render() {
return (
<h1> !Thats class base React Component </h1>
)
}
}
export default App;
Şimdi App.js componentimizden başkar bir component çağıralım. Greetings componentini çağırıyorum.
import React from 'react';
import Greatings from './Greatings';
class App extends React.Component {
render() {
return (
<Greatings />
)
}
}
export default App;
Şimdi Greetings componentimi tasarlıyorum. Top yani en üst componentiminin class base olmalı onun altındaki componentler method base olabilir.
import React from 'react';
export default () => {
return (<div>hi</div>);
}
Yorumlar
Yorum Gönder