无法读取未定义(阅读“name”)的属性类型错误:无法读取未定义的属性(阅读“name”)
index.js
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
import {legacy_createStore as createStore} from 'redux'
import { Provider } from 'react-redux';
const store = createStore((state = [], action) => {
if (action.type === 'ADD') return [...state, action.name];
return state;
});
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<React.StrictMode>
<Provider store={store}>
<App />
</Provider>
</React.StrictMode>
);
reportWebVitals();
App.js
import React, { createRef } from 'react';
import { connect } from 'react-redux';
const Item = ({ name, price }) => (<li>{name},${price}</li>)
const App = (props) => {
let nameRef = createRef();
let priceRef = createRef();
const add = () => {
props.add(
props.items.length +1,
nameRef.current.value,
priceRef.current.value,
)
}
return (
<div>
<ul>
{props.items.map(i => (
<Item key={i.id} name={i.name} price={i.price} />
))}
</ul>
<input type="text" ref={nameRef} />
<input type="text" ref={priceRef} />
<button onClick={add}>Add</button>
</div>
)
}
const stateToProps = state => {
return {
items: state
}
}
const dispatchToProps = dispatch => {
return {
add: (id, name, price) => {
dispatch ({
type: 'ADD',
item: { id, name, price }
})
}
}
}
const ReduxApp = connect(stateToProps, dispatchToProps)(App);
export default ReduxApp
Error
无法读取未定义(阅读'name')类型的属性错误:无法读取未定义的属性(阅读“name”)
1条答案
按热度按时间qni6mghb1#
问题数量
我不知道为什么代码没有在
i.id
上抛出错误,但问题是每次调度ADD
操作时,都将undefined
推入state数组。action
对象有两个属性:type
和item
,但是当在reducer函数中处理分派的动作时,将action.name
(即undefined
)追加到数组中。x一个一个一个一个x一个一个二个x
选择
state
并将其作为props.items
注入App
组件,Map后,每个数组元素值为undefined
,代码尝试访问属性并抛出错误。溶液
正确访问
ADD
action有效负载。您使用的是非常过时的redux模式,因此我将重写部分代码,使其与更传统的redux保持一致,这将使您更容易升级或使用现代redux。index.js
App.js
更现代的版本将使用
useDispatch
和useSelector
钩子来代替过时的connect
高阶组件。App.js