Reactjs Redux:如何将父道具传递到减速器的初始状态?

Reactjs Redux:如何将父道具传递到减速器的初始状态?,reactjs,redux,react-redux,Reactjs,Redux,React Redux,好吧,这让我很烦!在react中,我让一个测试组件接收道具以创建其初始状态,如下所示: constructor(props) { super(props) const {items} = this.props this.state = { items: {...items}, score: 0 } } 传递给它的项(成为状态的一部分)是要测试的项-它在测试这些项时开始删除这些项,直到state.items为空-其中测试完成 尝试在

好吧,这让我很烦!在react中,我让一个测试组件接收道具以创建其初始状态,如下所示:

constructor(props) {
    super(props)
    const {items} = this.props
    this.state = {
        items: {...items},
        score: 0
    }
}
传递给它的项(成为状态的一部分)是要测试的项-它在测试这些项时开始删除这些项,直到state.items为空-其中测试完成

尝试在redux中执行此操作时,我有以下减速器:

import * as types from '../actions/action-types'
import Store from '../Store'

const initialState = {
    items: {},// I want items to contain the props passed to this component
    score: 0
}

const testWrapperReducer = function(state = initialState, action) {
    let newState = null
    switch(action.type) {
        case types.QUESTION_ANSWERED: {
            let {items, score} = state
            delete items[action.english]
            score += action.isCorrect
            newState = {...state, items, score}
            break
        }
        default:
            newState = state
    }

    return newState
}

export default testWrapperReducer
我如何在这里设置initialState,使用其父组件提供给测试组件的道具?还是有更好的方法


干杯

我不会从父亲那里以道具的形式发送物品,相反,我会从父亲那里将物品发送到redux,并使用connect在子系统中接收它们

代码说明: -你在构造器中获得道具, -使用操作将项目发送到redux -作为道具接受它们 -使用道具渲染项目

import React, { PropTypes, Component } from 'react';
import { connect } from 'react-redux';
import * as actions from '../actions';

const Item = (props) => {
    <div>{props.item.name}</div>
}

class List extends React.Component {
    constructor(props) {
    super(props)
    this.props.setItems(this.props.items)
    }
  render() {
    return (
            <div>
                {this.props.items.map((item) => {
                    return <Item item={item}></Item>
                })}
            </div>
        )
  }
}

CreateChat.propTypes = {
    items: PropTypes.array,
    setItems: PropTypes.func
};

const mapStateToProps = (state) => {
    return {
        items: state.items
    };
};

const mapDispatchToProps = (dispatch) => {
    return {
        setItems: (items) => dispatch(actions.setItems(items))
    };
};

export default connect(
    mapStateToProps,
    mapDispatchToProps
)(List);
import React,{PropTypes,Component}来自'React';
从'react redux'导入{connect};
将*作为动作从“../actions”导入;
常量项目=(道具)=>{
{props.item.name}
}
类列表扩展了React.Component{
建造师(道具){
超级(道具)
this.props.setItems(this.props.items)
}
render(){
返回(
{this.props.items.map((item)=>{
返回
})}
)
}
}
CreateChat.propTypes={
项目:PropTypes.array,
setItems:PropTypes.func
};
常量mapStateToProps=(状态)=>{
返回{
项目:state.items
};
};
const mapDispatchToProps=(调度)=>{
返回{
setItems:(items)=>dispatch(actions.setItems(items))
};
};
导出默认连接(
MapStateTops,
mapDispatchToProps
)(名单);

您应该使用redux创建golabal存储,而不是将道具传递给组件,您可以调用更新redux存储并使用redux的connect函数将子组件连接到存储的操作通常是另一种方式,将数据加载到redux存储中,然后使用
connect
将数据作为道具发送到组件;)如果我使用的是功能组件,因为那里没有可用的构造函数,并且我不能使用useEffect,因为我希望在第一次渲染之前发生,并且只发生一次,那么我该怎么做?