Reactjs 在功能组件中正确使用mapActionsToProps(react-redux)

Reactjs 在功能组件中正确使用mapActionsToProps(react-redux),reactjs,react-redux,Reactjs,React Redux,但是它非常混乱,因为它不再识别这个.props 如何解决这个问题?你不需要在道具之前使用这个。。功能组件将接收道具作为参数 所以代码看起来像 const mapActionsToProps = { updateRouterElem: updateRouterElem, updateRouterArr: updateRouterArr, deleteRouterElem: deleteRouterElem, } //假设updateRouterArr是全局函数 常量upd

但是它非常混乱,因为它不再识别
这个.props


如何解决这个问题?

你不需要在
道具之前使用
这个。
。功能组件将接收道具作为参数

所以代码看起来像

const mapActionsToProps = {
    updateRouterElem: updateRouterElem,
    updateRouterArr: updateRouterArr,
    deleteRouterElem: deleteRouterElem,
}
//假设updateRouterArr是全局函数
常量updateRouterArr=(道具)=>{
if(props.router\u addr和&props.router\u用户名和&props.router\u pw){
props.updaterouterar({
路由器地址:props.router\u addr,
路由器用户名:props.router\u用户名,
路由器:道具。路由器
})
}否则{
警报('某些字段丢失')
}
}
导出常量路由卡=(道具)=>{
//您可以从RouterCard组件调用它
updateRouterArr(道具);
返回(
...
);
}
常量mapStateToProps=状态=>({
路由器:state.router.routers,
路由器地址:state.router.router\u addr,
路由器\u用户名:state.router.router\u用户名,
路由器:state.router.router,
})
常量mapActionsToProps={
updateRouterElem:updateRouterElem,
updateRouterArr:updateRouterArr,
deleteRouteReem:deleteRouteReem,
}
导出默认连接(MapStateTrops、mapActionsToProps)(RouterCard);

简单的

无论这是否有用,你都可以试试这个。我在mapActionsToProps中做了一些更改,并使用对象分解来获取道具。道具可以使用相同的名称访问

// Assuming that updateRouterArr is global function
const updateRouterArr = (props) => {
    if (props.router_addr && props.router_username && props.router_pw) {
        props.updateRouterArr({
            router_addr: props.router_addr,
            router_username: props.router_username,
            router_pw: props.router_pw
        })
    } else {
        alert('Some fields are missing')
    }
}

export const RouterCard = (props) => {
    // And you can call it from RouterCard component
    updateRouterArr(props);
    return (
        <div>
            ...
        </div>
    );
}

const mapStateToProps = state => ({
    routers: state.router.routers,
    router_addr: state.router.router_addr,
    router_username: state.router.router_username,
    router_pw: state.router.router_pw,
})

const mapActionsToProps = {
    updateRouterElem: updateRouterElem,
    updateRouterArr: updateRouterArr,
    deleteRouterElem: deleteRouterElem,
}

export default connect(mapStateToProps, mapActionsToProps)(RouterCard);
const updateRouterArr=(
{updateRouterElem,updateRouterArr,DeleteRouteReem,路由器,路由器地址,路由器用户名,路由器地址}
) => {
if(路由器地址和路由器用户名和路由器){
更新器({
路由器地址:路由器地址,
路由器用户名:路由器用户名,
路由器:路由器
})
}否则{
警报('某些字段丢失')
}
}
导出常量路由卡=(道具)=>{
返回(
...
);
}
常量mapStateToProps=状态=>({
路由器:state.router.routers,
路由器地址:state.router.router\u addr,
路由器\u用户名:state.router.router\u用户名,
路由器:state.router.router,
})
常量mapActionsToProps={
更新程序,
updateRouterArr,
删除Routerelem,
}
导出默认连接(MapStateTrops、mapActionsToProps)(RouterCard);

使用
connect
将Redux连接移动到另一个文件(如
index.js
或此文件旁边的
YourComponentContainer.jsx
文件),或者在导入操作时将其别名<代码>从“yourReduxActionFile”导入{updateRouterArr as updateRouterArrAction}
// Assuming that updateRouterArr is global function
const updateRouterArr = (props) => {
    if (props.router_addr && props.router_username && props.router_pw) {
        props.updateRouterArr({
            router_addr: props.router_addr,
            router_username: props.router_username,
            router_pw: props.router_pw
        })
    } else {
        alert('Some fields are missing')
    }
}

export const RouterCard = (props) => {
    // And you can call it from RouterCard component
    updateRouterArr(props);
    return (
        <div>
            ...
        </div>
    );
}

const mapStateToProps = state => ({
    routers: state.router.routers,
    router_addr: state.router.router_addr,
    router_username: state.router.router_username,
    router_pw: state.router.router_pw,
})

const mapActionsToProps = {
    updateRouterElem: updateRouterElem,
    updateRouterArr: updateRouterArr,
    deleteRouterElem: deleteRouterElem,
}

export default connect(mapStateToProps, mapActionsToProps)(RouterCard);
const updateRouterArr = (
{updateRouterElem, updateRouterArr, deleteRouterElem, routers, router_addr, router_username, router_pw}
) => {
    if (router_addr && router_username && router_pw) {
        updateRouterArr({
            router_addr: router_addr,
            router_username: router_username,
            router_pw: router_pw
        })
    } else {
        alert('Some fields are missing')
    }
}

export const RouterCard = (props) => {
    return (
        <div>
            ...
        </div>
    );
}

const mapStateToProps = state => ({
    routers: state.router.routers,
    router_addr: state.router.router_addr,
    router_username: state.router.router_username,
    router_pw: state.router.router_pw,
})

const mapActionsToProps = {
    updateRouterElem,
    updateRouterArr,
    deleteRouterElem,
}

export default connect(mapStateToProps, mapActionsToProps)(RouterCard);