在简单的待办事项列表应用程序中,我使用了FiltersContainer
组件,它为Filters
组件提供了道具:
// FiltersContainer.js
import { connect } from 'react-redux';
import { setVisibilityFilter } from '../actions';
import Filters from '../components/Filters';
function mapStateToProps(state) {
const { visibilityFilter } = state.todos;
// `visibilityFilter` variable value is - 'SHOW_ALL'.
return {
filters: [{
title: 'All',
value: 'SHOW_ALL',
active: visibilityFilter === 'SHOW_ALL',
}, {
title: 'Completed',
value: 'SHOW_COMPLETED',
active: visibilityFilter === 'SHOW_COMPLETED',
}, {
title: 'Active',
value: 'SHOW_ACTIVE',
active: visibilityFilter === 'SHOW_ACTIVE',
}],
};
}
function mapDispatchToProps(dispatch) {
return {
onFilterClick(value) {
dispatch(setVisibilityFilter(value));
},
};
}
export default connect(mapStateToProps, mapDispatchToProps)(Filters);
问题是,该组件在每次状态更改时都会呈现
例如,切换todo项将强制呈现
// FiltersContainer.js
function mapStateToProps(state) {
const { visibilityFilter } = state.todos;
return {
filters: '',
};
}
完整的应用程序代码可在-https://github.com/1ven/react-redux-todos
我错过什么了吗?
问题出在shallowEqual
util函数中,该函数使用react redux
库检查组件道具是否更改
此函数不进行deepEqual
检查,只进行shallow
检查,这就是包含数组属性的对象不等于同一对象的原因。
每次你从mapStateToProps返回一个新对象,这就是为什么旧道具不等于新道具。因此组件每次都被渲染
如果旧道具不等于新道具,则React渲染组件
return {
filters: [{
title: 'All',
value: 'SHOW_ALL',
active: visibilityFilter === 'SHOW_ALL',
}, {
title: 'Completed',
value: 'SHOW_COMPLETED',
active: visibilityFilter === 'SHOW_COMPLETED',
}, {
title: 'Active',
value: 'SHOW_ACTIVE',
active: visibilityFilter === 'SHOW_ACTIVE',
}],
};
oldProps=对象
newProps=另一个对象(虽然内容相同,但都是不同的对象)
oldprops==newprops//no rerender
当你这么做的时候
return {
filters: '',
};
oldprops = ''; newprops="oldprops===newprops不渲染
问题内容: 我有一个组件。 如果组件没有,我想将prop设置为,否则in可以是可选的。我怎么做? 不需要道具: 需要道具: 如果和为空,则抛出错误,说是 propTypes: 谢谢 问题答案: 您不需要其他库,“ prop- types”提供了现成的功能。参见https://facebook.github.io/react/docs/typechecking-with- proptypes.htm
我试图将表示组件与容器组件分开。我有一个和一个。容器负责触发redux操作,以基于当前用户获取适当的站点。 问题在于,在容器组件最初呈现之后,当前用户是异步获取的。这意味着容器组件不知道需要在其函数中重新执行代码,该函数将更新数据以发送到。我想当容器组件的一个道具(用户)发生变化时,我需要重新渲染它。如何正确地执行此操作?
问题内容: 什么是对React组件prop更新进行单元测试的正确方法。 这是我的测试装置; 这可以正常工作,并且测试通过了,但是显示了反应警告消息 我要测试的只是属性的更新,而不是使用其他属性创建元素的新实例。有没有更好的方法来执行此属性更新? 问题答案: AirBnB的酶库为这个问题提供了一个优雅的解决方案。 它提供了一个setProps方法,可以在浅包装或jsdom包装上调用该方法。
我有以下结构: ChildComponent只是呈现值:
我试着阅读关于JS和React的书籍和观看视频,但我仍然没有更好地理解React道具
我正在制作一个paginate组件,我在传递给这个paginate组件的道具上遇到了问题。元素道具正在自动更新,所以我不能使用componentWillReceiveProps来更新我的组件。 下面是我的父组件呈现和对Paginate组件的回调: 下面是我的分页组件: 代码在post advisions之后更新,但是:componentWillReceiveProps(nextProps){con