React + Redux 道具没有及时加载
React + Redux props not loading in time
我正在尝试根据从 Redux 接收并传递给我的组件道具的数据来切换 className 值。但是使用这段代码我只是收到这个错误:
Uncaught TypeError: Cannot read property '0' of null
看来道具还没收到呢。我听说过使用 default/fallback 道具,但没有成功实施。
我该如何解决这个问题?
calcROI() {
const myNum = (this.props.value1[0] + this.props.value2[0]);
let spanClassname = '';
if(myNum < 0) {
spanClassname = 'my-class';
}
const myNewNum = myNum.toFixed(0);
return {
spanClassname,
value : myNewNum
}
}
render() {
const {value3} = this.props;
const {spanClassname, value} = this.calcROI();
return (
<span className={spanClassname}>
My value is: {value + value3}
</span>
);
}
一个解决方案是使用默认值,在本例中为 0 在声明 myNum 时添加一些额外条件:
// check if this.props.value1 and value2 exists and their lengths > 1
const isMyNumExists = (this.props.value1 && this.props.value1.length > 1)
&& (this.props.value2 && this.props.value2.length > 1);
// if isMyNumExists is false or props is undefined, set myNum to 0
const myNum = this.props && isMyNumExists ?
(this.props.value1[0] + this.props.value2[0]) : 0;
已更新
但是,如果您想设置默认道具。您可以通过使用 propTypes.defaultProps 或在 mapStateToProps 中设置默认道具来完成。第二种情况仅在您从状态中获取 value1 和 value2 时才有效,我相信您在做什么。两个例子的默认值都是 [0].
使用默认道具:
// ... the rest of your import
import PropTypes from 'prop-types';
class MyClass extends Component {
// ... your code here
}
// insert default value here...
MyClass.defaultProps = {
value1: [0],
value2: [0]
};
在 mapStateToProps 中设置默认值:
const mapDispatchToProps = (store) => ({
value1: store.value1 || [0],
value2: store.value2 || [0]
})
我正在尝试根据从 Redux 接收并传递给我的组件道具的数据来切换 className 值。但是使用这段代码我只是收到这个错误:
Uncaught TypeError: Cannot read property '0' of null
看来道具还没收到呢。我听说过使用 default/fallback 道具,但没有成功实施。
我该如何解决这个问题?
calcROI() {
const myNum = (this.props.value1[0] + this.props.value2[0]);
let spanClassname = '';
if(myNum < 0) {
spanClassname = 'my-class';
}
const myNewNum = myNum.toFixed(0);
return {
spanClassname,
value : myNewNum
}
}
render() {
const {value3} = this.props;
const {spanClassname, value} = this.calcROI();
return (
<span className={spanClassname}>
My value is: {value + value3}
</span>
);
}
一个解决方案是使用默认值,在本例中为 0 在声明 myNum 时添加一些额外条件:
// check if this.props.value1 and value2 exists and their lengths > 1
const isMyNumExists = (this.props.value1 && this.props.value1.length > 1)
&& (this.props.value2 && this.props.value2.length > 1);
// if isMyNumExists is false or props is undefined, set myNum to 0
const myNum = this.props && isMyNumExists ?
(this.props.value1[0] + this.props.value2[0]) : 0;
已更新
但是,如果您想设置默认道具。您可以通过使用 propTypes.defaultProps 或在 mapStateToProps 中设置默认道具来完成。第二种情况仅在您从状态中获取 value1 和 value2 时才有效,我相信您在做什么。两个例子的默认值都是 [0].
使用默认道具:
// ... the rest of your import
import PropTypes from 'prop-types';
class MyClass extends Component {
// ... your code here
}
// insert default value here...
MyClass.defaultProps = {
value1: [0],
value2: [0]
};
在 mapStateToProps 中设置默认值:
const mapDispatchToProps = (store) => ({
value1: store.value1 || [0],
value2: store.value2 || [0]
})