2017-01-19 5 views
0

React Native (0.34.0) 및 Redux를 사용하고 있으므로 실수로 객체를 업데이트하지 않도록 객체 내부의 키를 고정하려고합니다. 순수 함수를 사용하십시오.React Native Object.freeze not working

그러나 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; 
    } 
} 
+0

Object.freeze가 잘 작동합니다 (iOS에서 테스트 됨). 어떤 플랫폼에서 이것을 테스트하고 있습니까? 또한, 파일 위에 "use strict"를 추가하여 고정 된 객체를 변경하면 오류가 발생하는지 확인하십시오. 엄격 모드에서 실행해야합니다. – jevakallio

답변

0

https://github.com/facebook/react-native/issues/5316를 참조

페이스 북 그래서 어떤 라이브러리가 엄격한으로 기록되지는 패키저는 node_modules에서 파일을 transpiles 엄격 모드와 호환되지 않는 일부 모듈을 가지고 있기 때문에

엄격한 모드는 기본적으로 사용되지 않습니다 모드가 중단됩니다.

저는 이것을 시행하기 위해 Babel의 변형 엄격 플러그인을 사용하고 있으며 저에게 잘 작동합니다. https://babeljs.io/docs/plugins/transform-strict-mode/

엄격하지 않은 모듈을 포함 시키거나 페이스 북에 앞으로 엄격하지 않은 모듈이 ReactNative에 포함될 경우 깨질 수 있습니다.