ReactNativeLocalization icon indicating copy to clipboard operation
ReactNativeLocalization copied to clipboard

formatString returns "TypeError: Cannot read property '0' of undefined"

Open zhenghow93 opened this issue 4 years ago • 2 comments

I have upgraded from version 0.1.32 to version 2.1.6, and formatString is broken. react-native version 0.61.5

For example:

strings: {
   info: 'Bread will be done in {0} minutes.'
}
const minute = 30;

Previously I could use it like strings.formatString(strings.info, minute) and it will display Bread will be done in 30 minutes.. Now it gives error TypeError: Cannot read property '0' of undefined.

After some experiments, I realised that strings.formatString(strings.info, [30]) would work. The README did not mention that we have to enclose the string params with [] square brackets.

Anything that I have missed? Thanks in advance.

zhenghow93 avatar Apr 10 '20 15:04 zhenghow93

Ah, okay. I realised that the minute was undefined at first, and then only updated with a value afterwards. Previous version will fill it with undefined for a while then update the value after it's updated. Any ways to accommodate undefined value?

zhenghow93 avatar Apr 10 '20 15:04 zhenghow93

I made a function to protect agains this error

export const formatString = (key, ...values) => {
  const variables = values?.map(val => val || '');
  return strings.formatString(key, ...variables);
};

jerearaujo03 avatar Jul 31 '21 04:07 jerearaujo03