Javascript mapStateToProps初始值来自props,然后仅为state

Javascript mapStateToProps初始值来自props,然后仅为state,javascript,reactjs,redux,Javascript,Reactjs,Redux,我有一个反应组件,它有一些道具。这些道具是由MapStateTrops提供的 const mapStateToProps = (state, {props}) => { return { feeds: props.feeds, feedEntries: props.feedEntries, .... 一旦用户开始与UI交互,他们就可以更改状态。此时,组件需要使用状态更新自身而不是道具 const mapStateToProps = (state

我有一个反应组件,它有一些道具。这些道具是由MapStateTrops提供的

const mapStateToProps = (state, {props}) => {
    return {
      feeds: props.feeds,
      feedEntries: props.feedEntries,
      ....
一旦用户开始与UI交互,他们就可以更改状态。此时,组件需要使用
状态更新自身
而不是
道具

const mapStateToProps = (state, {props}) => {
    return {
      feeds: state.feeds,
      feedEntries: state.feedEntries,
      ....

如何引导
mapstatetops
函数在首次加载时直接使用组件的道具。然后,只声明它的数据状态?

使用三元组检查状态属性是否为未定义的,并相应地获取属性值:

const mapStateToProps = (state = {}, props) => {
    return {
      feeds: state.feeds === undefined ? props.feeds : state.feeds,
      feedEntries: state.feedEntries === undefined ? props.feedEntries : state.feedEntries,
      ....
如果您知道属性不会将falsy值(false、null、0等)作为合法值,则可以将三元替换为:


我建议您采取另一种方法,而不是中断
mapstatetops
函数流,您最好从道具获取内部值,然后将用户更改的值保存到状态,渲染函数应该支持它,并检查是否有任何用户数据已接收到,最后是否执行了以下操作

export default (initProps) => {
  const combinedState = {
    ...defaultState,
    ...initProps,
  };
  return createStore(
    reducer,
    combinedState,
    applyMiddleware(logger, thunk),
  )
};
创建了一个包装createStore函数的函数。。它接受由1)组成的对象。主要组件的支柱(initProps)和2)
defaultProps
-导入到此文件的JS对象,具有默认的存储形状,init props覆盖defaultProps中的任何值

export default (props) => {
  const store = configStore(props);
  return (
    <Provider store={store}>
      <Editor props={{ ...props }} />
    </Provider>
  )
}
导出默认值(道具)=>{
常量存储=配置存储(道具);
返回(
)
}
主要组件是接收道具,将这些道具传递给config store函数。商店是使用上面的组合对象构建的

export default (props) => {
  const store = configStore(props);
  return (
    <Provider store={store}>
      <Editor props={{ ...props }} />
    </Provider>
  )
}