通过“;类“"实例”;使用ReactJS组件代替“props”文字
passing "class" "instances" to ReactJS components in lieu of `props` literals
当涉及到React.createElement
中提供的props
对象时,createElement
方法似乎只检查该对象的可枚举属性(或者至少看起来是这样)。
因此,如果我使用ECMAScript-6类对我的ReactJS状态进行建模,该类带有更改该状态的方法(封装,对吧?),我就不能在对createElement
的调用中将该状态传递给ReactJS组件,因为ReactJS看不到这些方法。所以我必须这样做:
const MyApp = React.createClass({
propTypes: {
methodA: React.PropTypes.func.isRequired,
methodB: React.PropTypes.func.isRequired
},
...});
class MyAppState {
...
}
let appState = new MyAppState();
ReactDOM.render(
React.createElement(MyApp, Object.assign(
{
methodA: s.methodA.bind(s),
methodB: s.methodB.bind(s)
}, appState))
, document.getElementById('somePlace')
)
这有点违背目的。我不是Javascript"类"的铁杆粉丝,但有没有一种方法可以让类以这种方式为ReactJS元素提供props
?类"字段"是可枚举的,所以没有问题,因为我不能通过这种方式传递方法/操作。
您遇到的问题是,您的方法没有在类实例上定义,它们是在构造函数的原型上定义的。
当React迭代类实例时,它不会迭代原型上的成员。
将应用程序状态建模为常规对象更简单,您可能会发现这种方法使应用程序更具可预测性。
使用对象还可以序列化状态以保存和读取为JSON(没有办法序列化类)。
如果使用类是因为需要创建多个状态实例,那么可以使用工厂函数。
function makeAppState(foo, bar, baz) {
return {
qux: foo + bar - baz
};
}
如果你使用一个类是因为你想用一些方法直接操纵你的状态,那么你也可以用工厂函数和原型来实现这一点。
function makeAppState(foo, bar, baz) {
var state = Object.create(AppStatePrototype);
state.qux = foo + bar - baz;
return state;
}
var AppStatePrototype = {
update() {
this.qux = 0;
}
};
至少在这种情况下,我更清楚update
方法不会出现在从makeAppState
返回的对象上。
如果您想将方法和属性一起传递,只需返回一个同时包含这两个方法和属性的对象文字即可。
function makeAppState(foo, bar, baz) {
return {
qux: foo + bar - baz,
update() {
this.qux = 0;
}
};
}
相关文章:
- 在 React 中嵌套组件,props 不会传递给子组件
- 通过“;类“"实例”;使用ReactJS组件代替“props”文字
- React Redux 子组件获取父组件设置的全局属性,而无需通过 props 传递它
- 如何将数据从子组件获取到 props 中传递的按钮的 onclick 中
- 如何处理 React 0.12+ 中的组件引用变量和 props
- 丢弃传递给 React 组件的 rest-props 是一个错误吗?
- 对React Native中从父组件传下来的props数组进行更改
- 通过react-router v4将props传递给子组件
- React-router:将props传递给es6处理器组件
- react-router是如何通过props传递参数给其他组件的?
- 如何使用单个文件组件传递Props ?
- 我可以更新React.js中的组件's props吗?
- 我可以在react组件的父组件中设置子组件的props吗?
- React的子组件有未定义的props.style
- 有了reactjs和react-router,我可以显示一个组件或者{this.props.children}吗?
- 从props中初始化组件状态
- React:将props传递给函数组件
- 如何在组件的Javascript eval中传递props
- React:如何给库中的组件添加一个props
- 子组件不会在setState之后使用新的props进行更新