redux-saga-beginner-tutorial
redux-saga-beginner-tutorial copied to clipboard
Error Cannot read property '_renderedComponent' of undefined
Hi guys,
I have implement redux-saga with type INCREMENT_ASYNC, but when I click on button Increment after 1 second, I received error message below:

Look like I have an undefined here:

This is my code:
sagas.js
import { delay } from 'redux-saga'
import { put, takeEvery, all, call } from 'redux-saga/effects'
export function* helloSaga() {
console.log('Hello Saga!')
}
// Our worker Saga: will perform the async increment task
export function* incrementAsync() {
yield call(delay, 1000)
yield put({ type: 'INCREMENT '})
}
// Our watcher Saga: spawn a new incrementAsync task on each INCREMENT_ASYNC
export function* watchIncrementAsync() {
yield takeEvery('INCREMENT_ASYNC', incrementAsync)
}
export default function* rootSaga() {
yield all([
helloSaga(),
watchIncrementAsync()
])
}
main.js
import "babel-polyfill"
import React from 'react'
import ReactDOM from 'react-dom'
import { createStore, applyMiddleware } from 'redux'
import createSagaMiddleware from 'redux-saga'
import Counter from './Counter'
import reducer from './reducers'
import rootSaga from './sagas'
const sagaMiddleware = createSagaMiddleware()
const store = createStore(
reducer,
applyMiddleware(sagaMiddleware)
)
sagaMiddleware.run(rootSaga)
const action = type => store.dispatch({type})
function render() {
ReactDOM.render(
<Counter
value={store.getState()}
onIncrement={() => action('INCREMENT')}
onDecrement={() => action('DECREMENT')}
onIncrementAsync={() => action('INCREMENT_ASYNC')} />,
document.getElementById('root')
)
}
render()
store.subscribe(render)
Counter.js
/*eslint-disable no-unused-vars */
import React, { Component, PropTypes } from 'react'
const Counter = ({ value, onIncrement, onDecrement, onIncrementAsync }) =>
<div>
<button onClick={onIncrementAsync}>
Increment after 1 second
</button>
{' '}
<button onClick={onIncrement}>
Increment
</button>
{' '}
<button onClick={onDecrement}>
Decrement
</button>
<hr />
<div>
Clicked: {value} times
</div>
</div>
Counter.propTypes = {
value: PropTypes.number.isRequired,
onIncrement: PropTypes.func.isRequired,
onDecrement: PropTypes.func.isRequired
}
export default Counter
reducers.js
export default function counter(state = 0, action) {
switch (action.type) {
case 'INCREMENT':
return state + 1
case 'INCREMENT_IF_ODD':
return (state % 2 !== 0) ? state + 1 : state
case 'DECREMENT':
return state - 1
default:
return state
}
}
Could you please tell me missing something here? Thanks all,