Javascript 获得;TypeError:无法获取属性';年龄';“未定义或空引用的”;当我试着跑的时候
如果分别单击“添加”按钮或“减去”按钮,我的应用程序只需增加年龄(初始化为20岁)或减少年龄 我不明白为什么我总是犯这个错误。我签入reducer.js以确保使用“age”属性相应地初始化状态,因此我完全不知道是什么导致了这种情况。我仔细检查了所有正确的依赖项,并确保所有语法都是正确的 我认为另一个原因可能是我没有在reducer.js中为代码行Javascript 获得;TypeError:无法获取属性';年龄';“未定义或空引用的”;当我试着跑的时候,javascript,reactjs,redux,Javascript,Reactjs,Redux,如果分别单击“添加”按钮或“减去”按钮,我的应用程序只需增加年龄(初始化为20岁)或减少年龄 我不明白为什么我总是犯这个错误。我签入reducer.js以确保使用“age”属性相应地初始化状态,因此我完全不知道是什么导致了这种情况。我仔细检查了所有正确的依赖项,并确保所有语法都是正确的 我认为另一个原因可能是我没有在reducer.js中为代码行constnewstate={state}使用spread操作符。出于某种原因,vscode不允许我使用spread运算符。每次我运行我的应用程序时,屏
constnewstate={state}
使用spread操作符。出于某种原因,vscode不允许我使用spread运算符。每次我运行我的应用程序时,屏幕上都不会显示任何内容。是否需要安装依赖项才能使用spread操作符
以下是我的代码:
//index.js
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import reducer from './reducer';
import { Provider } from 'react-redux';
import { createStore } from 'redux';
const store = createStore(reducer);
ReactDOM.render(
<Provider store={store}>
<App />
</Provider>,
document.getElementById('root')
);
我在这里看到三个问题:
- 您正在将newState声明为{state}。这将在对象中创建对象
- 由于您正在使用const声明newState,因此无法更改它。但你想改变你两个案子的新闻状态
- 你不能把任何东西还给州政府。redux的主要思想是通过返回新状态来更新状态李>
{
state: {
age: 20
}
}
这就是年龄未定义的原因,它不是直接的子属性
例如:
spreadLetters将是一个新对象,具有一个属性“letters”。
此属性的值将是原始letters变量的精确副本
{
letters: {
alpha: a
}
}
快速修复,您可以使用
对象。分配而不是排列运算符:
const newState = Object.assign({}, state);
要使用排列运算符,必须检查以下几项:
首先确保@babel/plugin提案对象rest-spread
依赖项位于package.json
中,然后将其添加到babel配置文件的插件中:
{
"plugins": ["@babel/plugin-proposal-object-rest-spread"]
}
有关更多信息,请访问可以更改常量对象的属性,但不能更改对象本身reassigned@daveyfaherty谢谢你指出。你能提到参考资料吗?这样我就可以了解更多信息了。当然:constnewstate={…state}
相当于const newState=Object.assign({},state)
-两者都克隆原始状态。现在newState
是一个包含初始状态的对象,即newState={state:{age:20}
{
letters: {
alpha: a
}
}
const newState = Object.assign({}, state);
{
"plugins": ["@babel/plugin-proposal-object-rest-spread"]
}