import
的資源,因此:
defaultValue
給出默認值;import React from 'react';
{}
相似於eval()、模板引擎、JS``模板變量,先執行
(執行模板中的表達式或調用)再渲染
(將表達式運行的結果渲染出來),因此要特別注意{}
中須要的是函數
仍是函數調用()
。npm install
時要注意包的使用環境。 Failed to compile
Module not found: Can't resolve 'XXX' in 'xxx.lib'
Functions are not valid as a React child. This may happen if you return a Component instead of <Component /> from render. Or maybe you meant to call this function rather than return it.
函數做爲React子函數無效。 若是從render props中返回{Component}
而不是<Component />
,則可能會發生這種狀況。 或許你打算調用這個函數而不是返回它。React.Children.only expected to receive a single React element child.
,某個組件能夠經過PropTypes做類型檢查,限制屬性類型MyComponent.propTypes = {
children: PropTypes.element.isRequired
};
複製代碼
redux
中使用combineReducers
時要注意其實現原理 —— 相似於以下代碼: 通常實現:const chatReducer = (state = defaultState, action = {}) => {
return {
chatLog: chatLog(state.chatLog, action),
statusMessage: statusMessage(state.statusMessage, action),
userName: userName(state.userName, action)
}
};
複製代碼
combineReducers實現const combineReducers = reducers => {
return (state = {}, action) => {
return Object.keys(reducers).reduce(
(nextState, key) => {
nextState[key] = reducers[key](state[key], action);
return nextState;
},
{}
);
};
};
複製代碼
不管是針對哪一個屬性拆分出來的子reducer
,在任意dispatch
發生時,都會被執行,因此定義subReducer
時要注意在內部根據action.type
來判斷執行路徑,若是這種type
的action
不會影響subReducer
對應的state.key
,那麼必定要直接返回該state.key
。