connect function
์ฌ์ฉํ๋ ์ฑ ์ํ ํธ๋ฆฌ๋ฅผ ์ธ์ํด์ผ ํ๊ณ react-dnd๋ ๊ตฌํํด์ผ ํ๋ ๊ตฌ์ฑ ์์๊ฐ ์๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๋ ๋ค export default
; ๊ทธ๋ฌ๋ ํ ๋ฒ๋ง ์ํํ ์ ์์ต๋๋ค. ๋ฐ์ฝ๋ ์ดํฐ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ง ์์ผ๋ฉด์ ๊ตฌ์ฑ ์์๋ฅผ redux์ ์ฐ๊ฒฐํ๊ณ dragdropcontext๋ฅผ ๊ฐ์ง ์ ์๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์์ต๋๊น?
์, ๋ค์๊ณผ ๊ฐ์ด ํ ์ ์์ต๋๋ค.
import { connect } from "react-redux";
import HTML5Backend from "react-dnd-html5-backend";
import { DragDropContext } from "react-dnd";
class App extends Component {
...
}
App = DragDropContext(HTML5Backend)(App);
export default connect(mapStateToProps)(App);
๋ค์ ์ด์ด์ฃผ์ธ์ :) .
์ ์ ๋ ๊ทธ๋ ๊ฒ ํด๋ณด๊ฒ ์ต๋๋ค. flow
๊ฒ๋ ํ์ฉ๋๋ ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์
๋๊น?
import { DragDropContext } from 'react-dnd'
import HTML5Backend from 'react-dnd-html5-backend'
import flow from 'lodash/flow'
export default flow(
connect(selector),
DragDropContext(HTML5Backend)
)(ExperienceEditor);
๋ค, ๊ทธ๊ฒ๋ ๊ฐ๋ฅํฉ๋๋ค!
ํฐ์น ๋ฐฑ ์๋์๋ ์๋ํ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค ...
๋๋ ์๋ํ๋ค
์ฑ = DragDropContext(TouchBackend({ enableMouseEvents: true }))(์ฑ);
๊ธฐ๋ณธ ์ฐ๊ฒฐ ๋ด๋ณด๋ด๊ธฐ(mapStateToProps, mapDispatchToProps)(์ฑ);
์ด ๋ฌธ์ ๋ฅผ ์ฌ๊ธฐ์ ๊ฒ์ํด์ผ ํ๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๊ฐ์ฌ ํด์.
@longmfe App
๋ ์ด๋ป๊ฒ ๊ฐ์ ธ ์ค๋์ ?
@jnrepo ๋ต๋ณ ๊ฐ์ฌํฉ๋๋ค.
๊ทธ๋ฅ ์์
ํฉ๋๋ค
import App from ../../somepath/App.js
๋ด๊ฐ ๊ทธ๊ฒ์ ์ฌ์ฉํ ๋ ๋ญ๊ฐ๋ฅผ ์ถ๊ฐํด์ผํฉ๋๊น?
BTW, ๋๋ ์ด๋ฐ ์์ผ๋ก ์ฑ์ ๋ง๋ญ๋๋ค.
import {connect} from react-redux
import {bindActionsCreators} from redux
class App extends Component {
}
App = DragDropContext(TouchBackend({ enableMouseEvents: true }))(App);
export default connect(mapStateToProps, mapDispatchToProps)(App);
์ ๋ง ๊ฐ์ฌํฉ๋๋ค. ์ข์ ํ๋ฃจ ๋์ธ์.
DragDropContext๋ก ๋ฃจํธ ๊ตฌ์ฑ ์์๋ฅผ ๋ํํ๋ ๋ฐ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ฝ์์์ ๋ค์์ ์ป์ต๋๋ค.
Invariant Violation: addComponentAsRefTo(...): Only a ReactOwner can have refs. You might be adding a ref to a component that was not created inside a component's
๋ ๋๋ง method, or you have multiple copies of React loaded (details: https://fb.me/react-refs-must-have-owner).
์ด ๋ฌธ์ ์ ์์ธ์ด ๋ฌด์์ธ์ง์ ๋ํ ๋จ์๊ฐ ์์ต๋๊น? ๋๋ React์ ์ฌ๋ฌ ์ฌ๋ณธ์ ํฌํจํ๊ณ ์๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ์ด๊ฒ์ DragDropContext๋ก ๋ฃจํธ ๊ตฌ์ฑ ์์๋ฅผ ๋ํํ๊ธฐ ์ ์ ์๋ฒฝํ๊ฒ ์๋ํ์ต๋๋ค. ๊ฐ์ฌ ํด์!
๋ค์๊ณผ ๊ฐ์ด root.js๋ฅผ ๊ตฌ์ฑํ์ต๋๋ค.
import { Component } from 'react';
import { DragDropContext } from 'react-dnd';
import HTML5Backend from 'react-dnd-html5-backend';
class Root extends Component {
render() {
return <div>
{React.cloneElement(this.props.children, this.props)}
</div>;
}
}
export default DragDropContext(HTML5Backend)(Root);
๊ทธ๋ฆฌ๊ณ App.js๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
import { bindActionCreators } from 'redux';
import { connect } from 'react-redux';
import Root from './root';
function mapStateToProps(state) {
return {
...
}
}
function mapDispatchToProps(dispatch) {
return bindActionCreators({
...
}, dispatch)
}
const App = connect(mapStateToProps, mapDispatchToProps)(Root);
export default App;
React ์ฝ์์ ์ด๋ฌํ ๋ฐฉ์์ผ๋ก ๊ตฌ์ฑ ์์๋ฅผ ๋ฐฐ์นํฉ๋๋ค...
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์, ๋ค์๊ณผ ๊ฐ์ด ํ ์ ์์ต๋๋ค.
๋ค์ ์ด์ด์ฃผ์ธ์ :) .