在react.js中处理未定义的props的最好方法是什么?
what's the best way to deal with undefined props in react.js?
让我们假设我有一个动作在页面加载时被调度,比如,在index.js文件中。
例子store.dispatch(loadData());
在我的减速器中,我将状态初始化为一个对象。像这样
function myReducer(state = {}, action)
现在我有了一些智能组件,它订阅了我的状态,然后将它传递给另一个组件来显示数据。此场景的另一个重要注意事项是,数据的检索是异步进行的。我们也假设这个对象的键是某个数组。标记组件应该是这样的
{this.props.object.key.map(k => do something)}
因为key没有定义,如果我在它上面调用map,就会爆炸。我处理这个问题的方法是使用一个简单的if检查。如果定义了key,则运行.map
,否则返回null。然后,当我的数据从服务器返回时,由于该组件订阅的状态发生了变化,将再次调用呈现。此时键已经定义,可以调用map。
另一种方法是定义你的状态在reducer中的样子。换句话说,如果我知道我的状态将是一个带有数组属性的对象,我可能会这样做。
const initialState = {
key:[]
}
function myReducer(state = initialState, action)
这样做将受益于这样一个事实,现在我不需要我的if检查,因为key从来没有未定义。
我的问题是;这些方法中有哪一种比另一种更好吗?或者,是否有另一种方法可以完全解决这个问题?
一般来说,我喜欢采用的方法是在组件上定义具有"空"语义的默认道具。例如,在你所描述的问题的背景下,我通常会这样构建我的组件(ES6类风格):
class MyComponent extends React.Component {
static defaultProps = {
object: {
key: []
}
};
...
method() {
// this.props.object.key is an empty array, but is overriden
// with a value later after completion of the reducer
// (trigerred asynchronously)
this.props.object.key.map(doSomething);
}
}
这是相对干净的,防止代码在运行时抛出,并迫使您为语义上为null、空或未定义的输入状态创建良好定义的行为。
相关文章:
- 打破承诺链的好方法是什么
- 在JavaScript中拆分日期字符串的更好方法是什么
- 将jQuery.ech()方法转换为本地JavaScript抽象的最佳方法是什么
- 处理浮点错误的最佳方法是什么
- 基于窗口宽度jquery的函数的替代方法是什么
- knex:根据结果创建数组的合适方法是什么
- 以编程方式填充组合框道场 (1.8) 的最佳方法是什么?
- 使用Modernizr检测移动设备最可靠的方法是什么
- 确定var是否是javascript中的elementFinder对象的方法是什么
- 用javascript修复这个JSON对象字符串最干净的方法是什么
- 让会话值可用于JavaScript的好方法是什么
- 从AngularJs获取谷歌地图对象的正确方法是什么
- 使用ReactJS和Flux架构从服务器获取数据的正确方法是什么
- 列出没有 mysql 的元素的最佳方法是什么
- 克服错误的更优雅的方法是什么:需要对象说明符.当通过JXA通过Messages发送SMS时,参数没有对象说明符
- 使用较少代码隐藏和显示选择菜单内容的更好方法是什么?javascript
- 在 Javascript 中实现解耦代码/回调的正确方法是什么?
- 使用Javascript,获取元素的方法是什么,基于打开和关闭标记之间的文本
- 在d3.json中使用d3.csv组合多个csv文件数据输入的最佳方法是什么
- 直接在DOM事件处理程序中调用作用域函数的最短方法是什么