React Native Object.freeze не работает
Я пытаюсь заморозить ключи внутри своего объекта, чтобы случайно не обновить их, так как я использую React Native (0.34.0) и Redux, поэтому мне нужно использовать чистые функции.
Однако, используя пакет deepFreeze npm, а также пробуя Object.freeze(...), он все же позволяет мне изменять мои ключи в следующем коде, любая помощь будет принята!
var Immutable = require('immutable');
var deepFreeze = require('deep-freeze');
import * as types from '../actions/actionTypes';
const initialState = {
customBackgroundColour: '#f7f7f7'
};
export default function backgroundColour(state = initialState, action = {}) {
switch (action.type) {
case types.SET_BACKGROUND_COLOUR:
deepFreeze(state);
deepFreeze(action);
console.log(Object.isFrozen(state)); // true
console.log(state.customBackgroundColour); // #f7f7f7
state.customBackgroundColour = 'red';
console.log(state.customBackgroundColour); // red
return {
...state,
customBackgroundColour: action.payload.colour
};
default:
return state;
}
}
1 ответ
См. https://github.com/facebook/react-native/issues/5316
Строгий режим не включен по умолчанию, потому что в facebook есть некоторые модули, которые не совместимы со строгим режимом, упаковщик также передает файлы под node_modules
, поэтому любая библиотека, не написанная в строгом режиме, сломается.
Я использую плагин Babel Transform Strict, чтобы обеспечить это, и он прекрасно работает для меня. https://babeljs.io/docs/plugins/transform-strict-mode/
Просто имейте в виду, что он может сломаться, если вы включите не строгие модули, или Facebook в будущем будет включать не строгие модули в ReactNative.