无法读取不可变记录中的列表条目

时间:2018-05-12 13:25:19

标签: reactjs list redux immutable.js

对于不可变的记录和列表我仍然有点新意,但这对我来说真的很困惑。我有一个包含列表的记录。在列表中有3个条目。我能够使用点符号非常简单地访问3中的2个。但是无论我做什么,其中一个似乎都是未定义的,甚至知道我可以在组件中看到它的记录。下面是我试图使用它的无状态功能组件中记录的控制台日志。

这是相关记录

console.log("PHOTO0::",competitor);

返回

Immutable Record and list

console.log("PHOTOIMAG::",competitor.imageLink);

返回

PHOTOIMAG:: https://testcreative.co.uk/wp-content/uploads/2017/10/Test-Logo-Circle-black-transparent.png

console.log("PHOTOKEY::",competitor.key);

返回

PHOTOKEY:: -LCK49TfAVBPBATG1oxp

console.log("PHOTODESC::",competitor.description)

返回

PHOTODESC:: undefined

我已经将我的道具传递到我的功能组件中,并且像这样连接了一个名为竞争对手的proptype。

Photo.propTypes = {
competitor: PropTypes.object.isRequired
}

在我的功能本身

function Photo({competitor}) {

所以我可以在返回中的条目上使用点表示法,但它只适用于ImageLink。

            <img className="photo" src={competitor.imageLink} alt={competitor.description} />

{competitor.imagLink}有效。我的照片在页面上呈现。但我没有他们的描述,即使我可以看到他们在记录中有描述条目(在控制台图像上方)。

我已经尝试了这些我不应该需要的东西,因为我是一个记录。

console.log("PHOTODESC::",competitor.get('description'));
console.log("PHOTODESC::",competitor.getIn(["description",0]))

我得到了#undefined&#39;。所以看起来很奇怪我访问其他条目但没有问题。我不理解我的不可变记录中的这些列表条目以及我如何使用它们?

Im React ^ 15.6.1,redux ^ 3.7.1,immutable ^ 3.8.1使用最新的chrome浏览器。环顾四周,并没有能够在网上找到类似的问题。任何帮助非常感谢。

**在此处添加请求的代码******

我的竞争对手减速机。这主要是来自todo的锅炉板,所以这可能是我的问题。

export const CompetitorsState = new Record({
deleted: null,
filter: '',
list: new List(),
previous: null
});

export function competitorsReducer(state = new CompetitorsState(), {payload, type}) {
 switch (type) {
case CREATE_COMPETITOR_SUCCESS:
  return state.merge({
    deleted: null,
    previous: null,
    list: state.deleted && state.deleted.key === payload.key ?
          state.previous :
          state.list.unshift(payload)
  });

case REMOVE_COMPETITOR_SUCCESS:
  return state.merge({
    deleted: payload,
    previous: state.list,
    list: state.list.filter(competitor => competitor.key !== payload.key)
  });

case FILTER_COMPETITORS:
  return state.set('filter', payload.filterType || '');

case LOAD_COMPETITORS_SUCCESS:
  return state.set('list', new List(payload));


default:
  return state;
}

相关行动

export const Competitor = new Record({
    decription: null,    
    imageLink: null,
    key: null,
});

export const competitorList = new FirebaseList({
    onAdd: createCompetitorSuccess,
    //onChange: updateTaskSuccess,
    onLoad: loadCompetitorsSuccess,
    onRemove: removeCompetitorSuccess
}, Competitor);




export function loadCompetitors() {
    return (dispatch, getState) => {
          const { auth } = getState();
          competitorList.path = `competitors/${auth.id}`;
          competitorList.subscribe(dispatch);
    };
}

export function loadCompetitorsSuccess(competitors) {
    return {
        type: types.LOAD_COMPETITORS_SUCCESS,
        payload: competitors
     };
}

export function createCompetitor(imageLink, description) {
      console.log("ACTION_CREATECOMESTART::", imageLink)
      console.log("ACTION_CREATECOMESTART2::", description)
      return dispatch => {
        competitorList.push({ description,imageLink })
        .catch(error => dispatch(createCompetitorError(error)));
      };
}

export function createCompetitorSuccess(competitor) {
    console.log("ACTION_CREATECOMESTARTSUCCESS::",competitor)
    return {
      type: types.CREATE_COMPETITOR_SUCCESS,
      payload: competitor
    };
 }

1 个答案:

答案 0 :(得分:2)

所以我终于找到了它。在我实例化我的记录时,这是一个错字。我的记录中的描述中缺少一个's',这弄乱了整个事情。

这就是我的错误

export const Competitor = new Record({
decription: null,    
pic: null,
key: null,  
});

应该是,

export const Competitor = new Record({
description: null,    
pic: null,
key: null,  
});

在我上面的控制台日志的这张照片中,它一直存在,我错过了它,因为我正确地进入我的数据库并且它在我的列表条目中正确显示。

enter image description here

希望这可以帮助将来的某个人!

相关问题