Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.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 作为函数参数的非结构化对象_Javascript_Reactjs_Destructuring - Fatal编程技术网

Javascript 作为函数参数的非结构化对象

Javascript 作为函数参数的非结构化对象,javascript,reactjs,destructuring,Javascript,Reactjs,Destructuring,我不明白下面的const Posts的参数。我对节点/反应相当陌生。它是非结构化参数对象吗?或者它只是一个作为参数传递的对象 getPosts和post显示为未定义。但是我不明白参数对象是从哪里传入函数的 完整代码如下: 提前谢谢 import React, { Fragment, useEffect } from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import

我不明白下面的
const Posts
的参数。我对节点/反应相当陌生。它是非结构化参数对象吗?或者它只是一个作为参数传递的对象

getPosts和post显示为未定义。但是我不明白参数对象是从哪里传入函数的

完整代码如下:

提前谢谢

import React, { Fragment, useEffect } from 'react';
import PropTypes from 'prop-types';
import { connect } from 'react-redux';
import Spinner from '../layout/Spinner';
import PostItem from './PostItem';
import PostForm from './PostForm';
import { getPosts } from '../../redux/actions/post';

const Posts = ({ getPosts, post: { posts, loading } }) => {
  useEffect(() => {
    getPosts();
  }, [getPosts]); ```


所以
Posts
是一个很好的例子

所有函数组件都将接收一个props对象作为其第一个参数

const Posts=(props)=>{/*…*/}
道具将始终是一个对象,其中包含渲染组件时传递给它的道具,例如:

import Posts from './path/to/Posts'

function SomeParentComponent() {
  return <Posts limit={10} categories={{news:true, sports:false}} />
}
当然,您可以在组件中分解props对象:

const Posts=(道具)=>{
常数{
极限,
类别
}=道具
//…其他东西
}
但是,您可以更进一步,执行所谓的“解包”来解构嵌套属性

const Posts=(道具)=>{
常数{
极限,
类别:{
体育
新闻
}
}=道具
//…其他东西
}
最后,不必在函数体中这样做,您可以在参数用于相同结果的地方对对象进行联机分解和解包

const Posts=({limit,categories:{news,sports}})=>{
//…其他东西
}
这就是您的代码示例所做的

它似乎期望父组件作为
getPosts
prop传入一个函数,调用该函数时将首先设置
posts。加载
为true,加载posts,然后将
posts.load
设置为false。例:

函数SomeParentComponent(){
常量[loading,setLoading]=useState(false)
const[posts,setPosts]=useState([])
const loadPosts=useCallback(异步()=>{
设置加载(真)
const loadedPosts=等待loadPostsSomehow()
setPosts([posts,…loadedPosts])
设置加载(错误)
}, [])
返回
}
请确保使用
useCallback
在此处获得一个记忆回调,否则您将陷入无限循环

**编辑**


在实际查看了所提供的链接后,实际上略有不同。父组件提供的
post
对象实际上是由redux提供的,但逻辑基本相同。不同之处在于,不是父组件更改加载和post状态,而是通过redux状态管理完成。

是的,它是非结构化的函数参数对象

在您的情况下,参数设置为
POST
传递函数

const-mapStateToProps=state=>({
post:state.post
});
导出默认连接(
MapStateTops,
{getPosts}
)(员额);
检查您的
getPosts
导入,确保它不是
未定义的

import { getPosts } from '../../actions/post';

还要检查redux状态并确保它具有
状态。post

是的,这是一个需要对象的函数,并在其参数声明中对其进行分解。“但我不知道参数对象从何处传递到函数中…”-看看调用
POST
精彩答案的代码-完全解释了它。非常感谢!我花了几个小时试图理解它。我不建议在参数所在的位置对对象进行解构和解包,因为您可能需要访问整个道具对象,例如,使用{…道具}将所有道具传递给孩子们啊。。。忘了向根减速器(reducers/index.js)添加帖子。调试React/node比调试php困难得多!是的,一开始很混乱。但在大型应用程序中,如果您接受Redux设置,您将开始欣赏React。