ListView在状态更新后不呈现新项目

时间:2016-06-01 11:25:55

标签: listview reactjs react-native render redux

我有一个Redux的React-Native项目。

我有组件"评论"嵌入组件" ParentComponent"。

添加评论后我的评论"评论"组件接收更新的状态,并使用props中的新数组调用Render函数。但是不要在listView上绘制新单元格。

我的行动评论代码

addComment:

if(parent_id){
  commentsList[parent_index].responses.push(responseObject)
}else{
  commentsList.splice(0, 0, responseObject)
}
Actions.pop()

var newList = commentsList
dispatch(commentsListUpdate(newList))

CommentListUpdate:

function commentsListUpdate(list) {
  return {
    type: types.COMMENTS_LIST_UPDATE,
    list
  };
}

我的减速机:

case types.COMMENTS_LIST_UPDATE:
  return {
    ...state,
    isFetching: false,
    list: action.list
  };

我的组件:

class Comments extends Component {
  render(){
    let ds = new ListView.DataSource({
        rowHasChanged: (r1, r2) => r1 !== r2
    });
    let dataSource = ds.cloneWithRows(this.props.list);

    return (
        <ListView
         dataSource={dataSource}
         renderRow={this._renderRow.bind(this)}
        />
    )
  }

  _renderRow(rowData: string, sectionID: number, rowID: number) {
        return (
            <View style={Styles.viewStyle}>
                <Comment
                    name={rowData.user.full_name}
                    avatar={rowData.user.photo_dir}
                    comment={rowData.content}
                    list={rowData.responses}
                    dispatch={this.props.dispatch}
                    owner_id={this.props.owner_id}
                />
            </View>
        )
  }
}

1 个答案:

答案 0 :(得分:0)

你能告诉我们你的减速机吗?我认为你通过推动这样的新元素来缓和状态:

case 'ADD_ITEM':
    return state.push(item)

如果改变状态,redux将不会看到OLD状态和NEW状态之间的区别。相反,你必须返回一个新数组:

case 'ADD_ITEM':
    return [...state, item]

修改compiled code

case 'ADD_ITEM':
    return [].concat(state, [item])