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.

Другие вопросы по тегам