Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获得;TypeError:无法获取属性';年龄';“未定义或空引用的”;当我试着跑的时候_Javascript_Reactjs_Redux - Fatal编程技术网

Javascript 获得;TypeError:无法获取属性';年龄';“未定义或空引用的”;当我试着跑的时候

Javascript 获得;TypeError:无法获取属性';年龄';“未定义或空引用的”;当我试着跑的时候,javascript,reactjs,redux,Javascript,Reactjs,Redux,如果分别单击“添加”按钮或“减去”按钮,我的应用程序只需增加年龄(初始化为20岁)或减少年龄 我不明白为什么我总是犯这个错误。我签入reducer.js以确保使用“age”属性相应地初始化状态,因此我完全不知道是什么导致了这种情况。我仔细检查了所有正确的依赖项,并确保所有语法都是正确的 我认为另一个原因可能是我没有在reducer.js中为代码行constnewstate={state}使用spread操作符。出于某种原因,vscode不允许我使用spread运算符。每次我运行我的应用程序时,屏

如果分别单击“添加”按钮或“减去”按钮,我的应用程序只需增加年龄(初始化为20岁)或减少年龄

我不明白为什么我总是犯这个错误。我签入reducer.js以确保使用“age”属性相应地初始化状态,因此我完全不知道是什么导致了这种情况。我仔细检查了所有正确的依赖项,并确保所有语法都是正确的

我认为另一个原因可能是我没有在reducer.js中为代码行
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的主要思想是通过返回新状态来更新状态
newState的定义如下所示:

{
  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"]
}