Javascript React redux reducer从状态获取数据?
尝试使用react和redux从API获取文件列表 当查看react-dev工具时,我可以在那里看到我的数据,但它没有被呈现 actions.jsJavascript React redux reducer从状态获取数据?,javascript,reactjs,redux,Javascript,Reactjs,Redux,尝试使用react和redux从API获取文件列表 当查看react-dev工具时,我可以在那里看到我的数据,但它没有被呈现 actions.js export const requestFiles = ({ type: REQUEST_FILES, }); export const receiveFiles = (json) => ({ type: RECEIVE_FILES, files: json, receivedAt: Date.now() }
export const requestFiles = ({
type: REQUEST_FILES,
});
export const receiveFiles = (json) => ({
type: RECEIVE_FILES,
files: json,
receivedAt: Date.now()
});
export const fetchFiles = (dispatch) => {
dispatch(requestFiles);
return fetch('/api/files')
.then(response => response.json())
.then(json => dispatch(receiveFiles(json)))
};
const files = (state = {
isFetching: false,
items: []
}, action) => {
switch (action.type) {
case REQUEST_FILES:
return {
...state,
isFetching: true,
};
case RECEIVE_FILES:
return {
...state,
isFetching: false,
items: action.files,
lastUpdated: action.receivedAt
};
default:
return state
}
};
const filesUploaded = (state = { }, action) => {
switch (action.type) {
case RECEIVE_FILES:
case REQUEST_FILES:
return {
...state,
items: files(state[action], action)
};
default:
return state
}
};
const rootReducer = combineReducers({
filesUploaded
});
export default rootReducer
class App extends Component {
static propTypes = {
files: PropTypes.array.isRequired,
isFetching: PropTypes.bool.isRequired,
dispatch: PropTypes.func.isRequired
};
componentDidMount() {
const {dispatch} = this.props;
dispatch(fetchFiles);
}
handleChange = nextSubreddit => {
};
render() {
const {files, isFetching} = this.props;
const isEmpty = files.length === 0;
console.log(`Files is empty ${isEmpty}`);
return (
<div>
<h1>Uploadr</h1>
{isEmpty
? (isFetching ? <h2>Loading...</h2> : <h2>No files.</h2>)
: <div style={{opacity: isFetching ? 0.5 : 1}}>
<Files files={files}/>
</div>
}
</div>
)
}
}
const mapStateToProps = state => {
const {uploadedFiles} = state;
const {isFetching, items: files} = uploadedFiles
|| {isFetching: true, items: []};
console.log(files);
return {
files,
isFetching,
}
};
该操作从JSON获取数据
reducer.js
export const requestFiles = ({
type: REQUEST_FILES,
});
export const receiveFiles = (json) => ({
type: RECEIVE_FILES,
files: json,
receivedAt: Date.now()
});
export const fetchFiles = (dispatch) => {
dispatch(requestFiles);
return fetch('/api/files')
.then(response => response.json())
.then(json => dispatch(receiveFiles(json)))
};
const files = (state = {
isFetching: false,
items: []
}, action) => {
switch (action.type) {
case REQUEST_FILES:
return {
...state,
isFetching: true,
};
case RECEIVE_FILES:
return {
...state,
isFetching: false,
items: action.files,
lastUpdated: action.receivedAt
};
default:
return state
}
};
const filesUploaded = (state = { }, action) => {
switch (action.type) {
case RECEIVE_FILES:
case REQUEST_FILES:
return {
...state,
items: files(state[action], action)
};
default:
return state
}
};
const rootReducer = combineReducers({
filesUploaded
});
export default rootReducer
class App extends Component {
static propTypes = {
files: PropTypes.array.isRequired,
isFetching: PropTypes.bool.isRequired,
dispatch: PropTypes.func.isRequired
};
componentDidMount() {
const {dispatch} = this.props;
dispatch(fetchFiles);
}
handleChange = nextSubreddit => {
};
render() {
const {files, isFetching} = this.props;
const isEmpty = files.length === 0;
console.log(`Files is empty ${isEmpty}`);
return (
<div>
<h1>Uploadr</h1>
{isEmpty
? (isFetching ? <h2>Loading...</h2> : <h2>No files.</h2>)
: <div style={{opacity: isFetching ? 0.5 : 1}}>
<Files files={files}/>
</div>
}
</div>
)
}
}
const mapStateToProps = state => {
const {uploadedFiles} = state;
const {isFetching, items: files} = uploadedFiles
|| {isFetching: true, items: []};
console.log(files);
return {
files,
isFetching,
}
};
App.js
export const requestFiles = ({
type: REQUEST_FILES,
});
export const receiveFiles = (json) => ({
type: RECEIVE_FILES,
files: json,
receivedAt: Date.now()
});
export const fetchFiles = (dispatch) => {
dispatch(requestFiles);
return fetch('/api/files')
.then(response => response.json())
.then(json => dispatch(receiveFiles(json)))
};
const files = (state = {
isFetching: false,
items: []
}, action) => {
switch (action.type) {
case REQUEST_FILES:
return {
...state,
isFetching: true,
};
case RECEIVE_FILES:
return {
...state,
isFetching: false,
items: action.files,
lastUpdated: action.receivedAt
};
default:
return state
}
};
const filesUploaded = (state = { }, action) => {
switch (action.type) {
case RECEIVE_FILES:
case REQUEST_FILES:
return {
...state,
items: files(state[action], action)
};
default:
return state
}
};
const rootReducer = combineReducers({
filesUploaded
});
export default rootReducer
class App extends Component {
static propTypes = {
files: PropTypes.array.isRequired,
isFetching: PropTypes.bool.isRequired,
dispatch: PropTypes.func.isRequired
};
componentDidMount() {
const {dispatch} = this.props;
dispatch(fetchFiles);
}
handleChange = nextSubreddit => {
};
render() {
const {files, isFetching} = this.props;
const isEmpty = files.length === 0;
console.log(`Files is empty ${isEmpty}`);
return (
<div>
<h1>Uploadr</h1>
{isEmpty
? (isFetching ? <h2>Loading...</h2> : <h2>No files.</h2>)
: <div style={{opacity: isFetching ? 0.5 : 1}}>
<Files files={files}/>
</div>
}
</div>
)
}
}
const mapStateToProps = state => {
const {uploadedFiles} = state;
const {isFetching, items: files} = uploadedFiles
|| {isFetching: true, items: []};
console.log(files);
return {
files,
isFetching,
}
};
类应用程序扩展组件{
静态类型={
文件:PropTypes.array.isRequired,
isFetching:PropTypes.bool.isRequired,
调度:需要PropTypes.func.isRequired
};
componentDidMount(){
const{dispatch}=this.props;
发送(获取文件);
}
handleChange=nextSubreddit=>{
};
render(){
const{files,isFetching}=this.props;
const isEmpty=files.length==0;
log(`Files is empty${isEmpty}`);
返回(
上传器
{我是空的
?(正在提取?正在加载…:无文件。)
:
}
)
}
}
常量mapStateToProps=状态=>{
const{uploadedFiles}=state;
const{isFetching,items:files}=uploadedFiles
||{isFetching:true,项:[]};
console.log(文件);
返回{
文件夹,
很吸引人,
}
};
在操作中接收到的数据,但我不确定它是否被存储,或者问题是否是从redux存储访问它
如上面的屏幕截图所示,应用程序组件的files属性仍然为零
有什么想法吗?你上传的
文件没有任何意义。我甚至不知道上传的文件应该做什么。您的文件
减速机看起来像普通减速机。看起来你可以删除上传的文件,一切都会好起来的
特别是,filesuppload
正在调用文件(state[action],action)
<代码>操作
是一个对象。状态[某个对象]
应该是什么?因为它被解析为状态['[object]]
,这肯定是未定义的,而且永远不会被定义
您的文件
reducer还有一个从未使用过的items
参数。减速器应该只有两个参数:状态和动作。删除items参数
您的mapStateToProps
正在查找state.uploadedFiles
,但您的减速机名为filesUploaded
。它应该是state.filesUploaded
(或者如果用files
reducer替换它,只需state.files
)
mapstatetops
将不需要|{isFetching:true,items:[]}
,因为您的文件
reducer上有一个初始状态。您的文件上传
reducer没有任何意义。我甚至不知道上传的文件应该做什么。您的文件
减速机看起来像普通减速机。看起来你可以删除上传的文件,一切都会好起来的
特别是,filesuppload
正在调用文件(state[action],action)
<代码>操作是一个对象。状态[某个对象]
应该是什么?因为它被解析为状态['[object]]
,这肯定是未定义的,而且永远不会被定义
您的文件
reducer还有一个从未使用过的items
参数。减速器应该只有两个参数:状态和动作。删除items参数
您的mapStateToProps
正在查找state.uploadedFiles
,但您的减速机名为filesUploaded
。它应该是state.filesUploaded
(或者如果用files
reducer替换它,只需state.files
)
mapstatetrops
将不需要|{isFetching:true,items:[]}
,因为您的文件具有初始状态。删除您上传的文件
缩减器。你不需要它。相反,只需使用文件
减速机:
const rootReducer = combineReducers({
files,
});
请注意,您感兴趣的状态片段将被称为文件
。将MapStateTops
功能更改为:
const mapStateToProps = state => {
const {isFetching, items: files} = state.files
console.log(files);
return {
files,
isFetching,
}
};
您可以在这里看到,我们获取状态的文件
片段并将其传递到您的组件。删除您上传的文件
reducer。你不需要它。相反,只需使用文件
减速机:
const rootReducer = combineReducers({
files,
});
请注意,您感兴趣的状态片段将被称为文件
。将MapStateTops
功能更改为:
const mapStateToProps = state => {
const {isFetching, items: files} = state.files
console.log(files);
return {
files,
isFetching,
}
};
您可以在这里看到,我们抓取状态的文件
片段并将其传递到您的组件。如果您查看下一个状态
是否有您请求的信息?如果您查看下一个状态
是否有您请求的信息?谢谢,我正在使用此作为示例-谢谢,我用这个作为例子-You da real MVPGlad it Help:)You da real MVPGlad it Help:)