Skip to content

Commit 4043b88

Browse files
Exercícios de react + redux
1 parent ee0bb92 commit 4043b88

File tree

15 files changed

+219
-6
lines changed

15 files changed

+219
-6
lines changed
Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import React, { Component } from 'react'
2+
import { connect } from 'react-redux'
23

34
class Field extends Component {
45

@@ -16,11 +17,15 @@ class Field extends Component {
1617
render() {
1718
return (
1819
<div>
19-
<label>{this.state.value}</label><br />
20-
<input onChange={this.handleChange} value={this.state.value} />
20+
<label>{this.props.value}</label><br />
21+
<input onChange={this.handleChange} value={this.props.value} />
2122
</div>
2223
)
2324
}
2425
}
25-
26-
export default Field
26+
function mapStateToProps(state) {
27+
return {
28+
value: state.field.value
29+
}
30+
}
31+
export default connect(mapStateToProps)(Field)

exercicios_react/ex.18/index.jsx

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import React from 'react'
2+
import ReactDOM from 'react-dom'
3+
import { combineReducers, createStore } from 'redux'
4+
import { Provider } from 'react-redux'
5+
6+
import Field from './field'
7+
8+
const reducers = combineReducers({
9+
field: () => ({ value: 'Opa' })
10+
})
11+
12+
ReactDOM.render(
13+
<Provider store={createStore(reducers)}>
14+
<Field initialValue='Teste' />
15+
</Provider>
16+
, document.getElementById('app'))

exercicios_react/ex.19/field.jsx

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import React, { Component } from 'react'
2+
import { connect } from 'react-redux'
3+
import { bindActionCreators } from 'redux'
4+
import { changeValue } from './fieldActions'
5+
6+
class Field extends Component {
7+
8+
constructor(props) {
9+
super(props)
10+
this.state = { value: props.initialValue }
11+
12+
this.handleChange = this.handleChange.bind(this)
13+
}
14+
15+
handleChange(event) {
16+
this.setState({ value: event.target.value })
17+
}
18+
19+
render() {
20+
return (
21+
<div>
22+
<label>{this.props.value}</label><br />
23+
<input onChange={this.props.changeValue} value={this.props.value} />
24+
</div>
25+
)
26+
}
27+
}
28+
function mapStateToProps(state) {
29+
return {
30+
value: state.field.value
31+
}
32+
}
33+
function mapDispatchToProps(dispatch) {
34+
return bindActionCreators({ changeValue }, dispatch)
35+
}
36+
export default connect(mapStateToProps, mapDispatchToProps)(Field)
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
export function changeValue(e) {
2+
console.log('changeValue')
3+
return {
4+
type: 'VALUE_CHANGED',
5+
payload: e.target.value
6+
}
7+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
const INITIAL_STATE = { value: 'Opa' }
2+
3+
export default function(state = INITIAL_STATE, action) {
4+
switch(action.type) {
5+
case 'VALUE_CHANGED':
6+
return { value: action.payload }
7+
default:
8+
return state
9+
}
10+
}

exercicios_react/ex.19/index.jsx

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import React from 'react'
2+
import ReactDOM from 'react-dom'
3+
import { combineReducers, createStore } from 'redux'
4+
import { Provider } from 'react-redux'
5+
6+
import Field from './field'
7+
import fieldReducer from './fieldReducer'
8+
9+
const reducers = combineReducers({
10+
field: fieldReducer
11+
})
12+
13+
ReactDOM.render(
14+
<Provider store={createStore(reducers)}>
15+
<Field initialValue='Teste' />
16+
</Provider>
17+
, document.getElementById('app'))

exercicios_react/ex.20/counter.jsx

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import React from 'react'
2+
import { bindActionCreators } from 'redux'
3+
import { connect } from 'react-redux'
4+
import { inc, dec, stepChanged } from './counterActions'
5+
6+
const Counter = props => (
7+
<div>
8+
<h1>{props.counter.number}</h1>
9+
<input onChange={props.stepChanged}
10+
value={props.counter.step} type='number' />
11+
<button onClick={props.dec}>Dec</button>
12+
<button onClick={props.inc}>Inc</button>
13+
</div>
14+
)
15+
16+
const mapStateToProps = state => ({ counter: state.counter })
17+
const mapDispatchToProps =
18+
dispatch => bindActionCreators({ inc, dec, stepChanged }, dispatch)
19+
export default connect(mapStateToProps, mapDispatchToProps)(Counter)
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
export function inc() {
2+
return { type: 'INC' }
3+
}
4+
5+
export function dec() {
6+
return { type: 'DEC' }
7+
}
8+
9+
export function stepChanged(e) {
10+
return {
11+
type: 'STEP_CHANGED',
12+
payload: e.target.value
13+
}
14+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
const INITIAL_STATE = { step: 1, number: 0 }
2+
3+
export default function(state = INITIAL_STATE, action) {
4+
switch(action.type) {
5+
case 'INC':
6+
return { ...state, number: state.number + state.step }
7+
case 'DEC':
8+
return { ...state, number: state.number - state.step }
9+
case 'STEP_CHANGED':
10+
return { ...state, step: +action.payload }
11+
default:
12+
return state
13+
}
14+
}

exercicios_react/ex.20/index.jsx

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import React from 'react'
2+
import ReactDOM from 'react-dom'
3+
import { combineReducers, createStore } from 'redux'
4+
import { Provider } from 'react-redux'
5+
6+
import counterReducer from './counterReducer'
7+
import Counter from './counter'
8+
9+
const reducers = combineReducers({
10+
counter: counterReducer
11+
})
12+
13+
ReactDOM.render(
14+
<Provider store={createStore(reducers)}>
15+
<Counter />
16+
</Provider>
17+
, document.getElementById('app'))

0 commit comments

Comments
 (0)