javascript - React - 我的待办事项应用程序中没有调用 mapStateToProps 函数

标签 javascript reactjs redux jsx

这是我使用 Redux 的第二天。

该应用程序的基本结构是:

App
-TodoForm
-TodoList
--TodoListItem

reducer 函数被调用,但它没有调用 mapStateToProps。我尝试了console.log()。我使用了react-hot-boilerplate。请让我知道 mapStateToProps 函数未被调用的原因。

https://github.com/rickieanand/reduxTodo

import React, {Component} from 'react';
import ReactDOM from 'react-dom';
import { createStore} from 'redux'
import { Provider, connect } from 'react-redux'

//store

let store = createStore(todo)


//actions
const ADD_TODO = 'ADD_TODO'
let x = 1
function addTodo(text) {
    return {
        type: ADD_TODO,
        id: x++,
            text: text
    }
}

//reducer

function todo(state = { id: 0, text: "", completed: false }, action) {
    console.log("reducer Called")
    console.log(action)

    switch (action.type) {
        case 'ADD_TODO':
            console.log(Object.assign({}, state, {
                id: action.id,
                text: action.text,
                completed: false
            }) !== state)

            return Object.assign({}, state, {
                id: action.id,
                text: action.text,
                completed: false
            })
        default:
            return state
    }
}




//component App
class App extends Component {
    onHandleSubmit(text) {
        console.log('OnHandleSubmit Called')
        store.dispatch(addTodo(text))
        console.log('----------')
        store.getState()
        console.log('----------')
    }
    render() {
        console.log(this.props)
        return (
            <div>
                <h1>Hello, world.</h1>
                <TodoForm onHandleSubmit={this.onHandleSubmit}/>
                <TodoList/>
            </div>
        );
    }
}

function mapStateToProps(state, ownProps) {
    console.log("mapStateToProps")
    console.log(state)
    console.log(ownProps)
    return {
        text: state.text,
        id: state.id,
        completed: false
    }
}

connect(mapStateToProps)(App)

//component Form

class TodoForm extends Component {
    constructor(props) {
        super(props)
        //            this.handleAdd = this.handleAdd.bind(this)
    }
    // handleAdd(e){
    // e.preventDefault()
    // console.log(e.target)
    // //dispatch(addTodo(e.value))
    // }
    render() {
        let input
        return (
            <div>
                <form onSubmit={e => {
                    e.preventDefault()
                    if (!input.value.trim()) {
                        return
                    }
                    console.log(input.value)
                    this.props.onHandleSubmit(input.value)
                    //store.dispatch(addTodo(input.value))
                    //input.value = ''
                } }>
                    <input ref={node => {
                        input = node
                    } } />
                    <button type="submit">
                        Add Todo
                    </button>
                </form>
            </div>
        );
    }
}

//component TodoList
class TodoList extends Component {
    constructor(props) {
        super(props)
    }
    render() {
        return (
            <ul><TodoListItem /></ul>
        );
    }
}

//component TodoListItem
class TodoListItem extends Component {
    constructor(props) {
        super(props)
        this.handleDelete = this.handleDelete.bind(this)
    }
    handleDelete(e) {
        e.preventDefault()
        console.log(e.value)
        //this.props.dispatch(addTodo(e.value));
    }
    render() {
        return (
            <li>{this.props.text}<button id={this.props.id} onClick=   {this.handleDelete}/></li>
        );
    }
}

ReactDOM.render(<Provider store={store}><App /></Provider>, document.getElementById('root'));

最佳答案

connect(mapStateToProps)(App) 返回连接的组件。写;

const ConnectedApp = connect(mapStateToProps)(App);

然后:

ReactDOM.render(<Provider store={store}><ConnectedApp /></Provider>, document.getElementById('root'));

关于javascript - React - 我的待办事项应用程序中没有调用 mapStateToProps 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37875688/

相关文章:

javascript - React - useImperativeHandle 暴露的属性重叠

reactjs - 如何在redux store中保存数组对象数据

javascript - 如何分离相互依赖的 redux reducer?

javascript - reducer 更新了 apposArrayProp 但 Redux 没有更新我的 View

javascript 数字数组中的奇数和偶数分隔

javascript - 创建可重用的 jQuery 函数

javascript - 使用 JSX 在 <code> 标签内渲染 JavaScript

javascript - Couchbase View 过滤日期范围内的数据

javascript - 如何更改 ngx-daterangepicker-material 下拉日历的样式

javascript - HashRouter提示react router 4.x中的错误