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。