私は自分のReactクラスで定義された "hello"メソッドを呼び出そうとしています。コンポーネント上の私の小道具は、学生の状態オブジェクトから値を読み取るように設定され、プロパティの1つが名前「こんにちは」である。 helloプロパティは、johnのデフォルトのpropからのinitです。 johnのデフォルトの小道具がプロパティ以外のものに設定され、オブジェクトをログアウトすると、正しく表示されます。しかし、私は私の "hello"メソッドをjohnプロパティから呼び出そうとすると、何も起こりません( "hello"という単語をログアウトすることになっています。)私の質問は、Reactのデフォルトプロパティまたはinit状態どうすればいいですか?React.JS状態からの呼び出し方法
サイドノート:私が使っているライブラリについて疑問に思っているのであれば、それはReact-Drag & Dropです(デカップリング用)
import React from 'react';
var ItemTypes = require('../box1/Constants').ItemTypes;
var DropTarget = require('react-dnd').DropTarget;
var Student = require('../box1/box1');
import update from 'react/lib/update';
require('./box2.css');
require('../../containers/Home/home.css');
var BoxSource = {
drop: function (props, monitor, component) {
const item = monitor.getItem();
console.log(item);
const delta = monitor.getDifferenceFromInitialOffset();
const left = Math.round(item.left + delta.x);
const top = Math.round(item.top + delta.y);
const id = item.id;
component.move(id, left, top);
}
};
function collect(connect, monitor) {
return {
connectDropTarget: connect.dropTarget(),
didDrop: monitor.didDrop(),
source: monitor.getSourceClientOffset(),
item: monitor.getItem(),
drop: monitor.didDrop(),
result: monitor.getDropResult()
};
}
var box2 = React.createClass({
getInitialState: function() {
return { Students: {
'1': { top: 20, left: 80, hello: this.props.john }
}
,text: 0 };
},
getDefaultProps: function() {
return {
john: this.hello
};
},
move: function(id,left,top){
this.setState(update(this.state,{
Students:{
[id]:{
$merge:{
left:left,
top: top
}
}
}
}));
},
onChange: function(e){
this.setState({ text: e.target.value });
},
add: function (e){
var StudentsNew = { };
for(var i = 1; i <= this.state.text; i++){
StudentsNew [i] = { left: 100, top: 100 } ;
}
var StudentsCopy = this.state.Students;
var studentMerge = Object.assign(StudentsCopy,StudentsNew);
this.setState({ Students: studentMerge })
},
reset: function(){
this.setState({ Students:{ [1]: { top: 20, left: 80 } } });
},
hello: function(){
console.log('hello');
},
render:function() {
const { Students } = this.state;
var connectDropTarget = this.props.connectDropTarget;
return connectDropTarget(
<div id = "box">
{Object.keys(Students).map(key =>{
const { left, top, title, hello } = Students[key];
return(
<div>
<Student key = {key} id = {key} left = {left}
top = {top} hello = {hello} > </Student>
</div>
);})}
<button onClick = {this.add}> Enter Amount of Students </button>
<button onClick = {this.reset}> Reset </button>
<input onChange = {this.onChange} type="number" name="quantity" min="1" max="200"/><br/>
</div>
);
}
});
module.exports = DropTarget(ItemTypes.STUDENT, BoxSource, collect)(box2);
ありがとう:たぶん、あなたは
getInitialState
EDIT状態と設定方法の 例に国家として
hello
方法を参照する必要があります。初期の小道具が早い時期に呼び出されたことは知らなかった。それは間違いなく問題になるかもしれません。あなたの答えの他の部分については、あなたは何を意味するのかの例を挙げることができますか?私はhelloメソッドに初期状態を設定することを意味していると思います。そうです、私はこれを先に試してみましたが、うまくいきませんでした。 –私の答えに例を追加しました。何か問題がある場合は私に知らせてください。 –
動作しません。いいえ。 –