React Native-使用Redux将项目添加到FlatList

时间:2018-08-16 12:40:06

标签: reactjs react-native redux react-redux

我正在尝试使用Redux实现一个简单的待办事项列表练习应用程序。

我有一个TextInput,一个Button和一个FlatList,这些项目以数组形式存储在store中,并由reducer处理。 当按下按钮时,带有输入文本的项目应为 添加到列表中。

当前,当我按下按钮时,没有任何反应,列表似乎没有呈现,并且未添加新元素。 我怀疑onPress处理中可能出了点问题,但是我不确定,我可能在其他地方犯了错误,我对React Native还是很陌生

欢迎您帮忙解决此问题。

到目前为止,这是我的代码(不包括导入):

动作

export const addItem = item =>({type: ADD_ITEM, payload: item});

减速器

const initialState = {
    items: [],
};

const itemReducer = (state = initialState, action) => {
    switch(action.type) {
        case ADD_ITEM:
            return { ...state, items: [...state.items, action.payload] };
        default: 
            return state;
    }

};

export default itemReducer;

商店

const store = createStore(itemReducer);

export default store;

输入表格

const mapDispatchToProps = dispatch => {
    return {
        addItem: item => dispatch(addItem(item))
    };
};

class ItemInput extends Component {
    constructor(props) {
        super(props);
        this.state = { itemText: 'Add an item' };
        this.handleSubmit = this.handleSubmit.bind(this);
    }

    handleSubmit() {
        //event.preventDefault();
        const { itemText } = this.state;
        this.props.addItem( { itemText } );
        this.setState({ itemText: "" });
    }

    render() {
        return (
            <View>
                <TextInput
                    style={{height: 40, borderColor: 'gray', borderWidth: 1}}
                    onChangeText={(itemText) => this.setState({itemText})}
                    value={this.state.itemText}
                />
                <Button
                    onPress={this.handleSubmit}
                    title="Submit"
                    color="#841584"
                />
        </View>
        );
    }
}

export default ItemInput = connect(null, mapDispatchToProps)(ItemInput);

列表

const mapStateToProps = state => {
    return { items: state.items };
  };

class ItemList extends Component {

    constructor(props) {
        super(props);

        this.state = {
        };

        this.renderItem = this.renderItem.bind(this);
        this.keyExtractor = this.keyExtractor.bind(this);
    }

    render() {
        return (
            <View style={{flex:1, backgroundColor: '#F5F5F5', paddingTop:20}}>
            <FlatList
                ref='listRef'
                data={this.props.items}
                renderItem={this.renderItem}
                keyExtractor={this.keyExtractor}/>
            </View>
        );
    }

    keyExtractor = (item, index) => index.toString();

    renderItem({item, index}) {
        return (
            <View style={{backgroundColor: 'white'}}>
                <Text>{item.title}</Text>
            </View>
        )
    }
}

export default List = connect(mapStateToProps)(ItemList);

待办事项列表组件

class ToDoList extends Component {
    render() {
        return (
            <View>
                <ItemInput/>
                <List/>
            </View>
        );
    }
}

export default ToDoList;

应用(根)

export default class App extends Component {
  render() {
    return (
      <Provider store={store}>
        <ToDoList/>
      </Provider>
    );
  }
}

0 个答案:

没有答案