javascript - 如何从存储中的数组中获取单个元素
问题描述
我正在尝试以我认为纯粹的redux
方式实现一个应用程序。将数据从存储中拉出,而不是通过道具。
在下面的示例中,我不必将道具传递给List
组件。它list
使用connect
. 但是我看不到任何不使用道具element
从list
商店拉入组件的方法。Element
有没有办法在不通过道具进行管道的情况下做到这一点?
import React, { Component } from 'react';
import ReactDOM from 'react-dom'
import {createStore} from 'redux'
import thunk from 'redux-thunk'
import {connect, Provider} from 'react-redux'
//Just return the same state
const testReducer = (state=null,{list}) => ({ ...state, list })
function testAction() {
return {
type: 'TEST',
list: ['first','second']
}
}
const store = createStore(testReducer, [thunk])
store.dispatch(testAction())
class List extends Component {
render(){
const {list} = this.props
return(
<div>
{list.map((element) => {
return(<Element key={element} element={element} />)
})}
</div>
)
}
}
function mapStateToProps({list}){
return( {
list
})
}
const ConnectList = connect(mapStateToProps)(List)
class Element extends Component {
render(){
const {element} = this.props
return(
<div>{element}</div>
)
}
}
ReactDOM.render(<Provider store={store}>
<ConnectList />
</Provider>,
document.getElementById('root')
);
解决方案
这是使用 Redux 将 props 传递给组件的一种正确且常见的方式。在这里,您的主要想法是list
在您的商店中保存数据。你不能在 store 中保存这个数据中的每个项目,所以只有list
通过 prop 获取并将其项目映射到单独的组件是一个好方法。
甚至,在 Redux 的文档中,他们在Todo 应用示例中使用了这个。
const TodoList = ({ todos, toggleTodo }) => (
<ul>
{todos.map(todo =>
<Todo
key={todo.id}
{...todo}
onClick={() => toggleTodo(todo.id)}
/>
)}
</ul>
)
这里 TodoList 通过另一个组件连接到 store。所以它是从带有proptodos
的 store 和 mappingTodo
组件中获取的。todo
推荐阅读
- c# - 安装程序
> 不包含“ReturnsAsync”的定义 - node.js - Node Async / Await issue
- javascript - How to just change object property values that exists?
- opengl - 为什么我的 PyOpenGL 着色器代码不断出错?
- python - 使用 sys.getsizeof 在 python 中获取数据库大小的正确方法是什么?
- google-analytics - Google Analytics Users but no Pageviews?
- strapi - 如何在 Strapi.io 中获取角色和用户配置文件
- python - 将 .py 当前代码保存到特定文件夹
- c# - ASP.Net Web API:如何处理 DTO 和域对象之间的属性重复
- javascript - 如何在没有 javascript 的情况下在 html 中使用带有 pre 标记的关系缩进?