私はReactでd3を使用しており、いくつかのd3関連変数/オブジェクトにアクセスする必要のあるd3関連関数をいくつか持っています。 componentWillReceiveProps()が呼び出されたときにこれらの関数を呼び出す必要があります。私は最小限の例を提供し、コメントは最も重要なものです。Reactで第三者Lib関数を呼び出す
class App extends Component {
constructor() {
super();
}
shouldComponentUpdate() {
return false;
}
componentWillReceiveProps(nextProps) {
/* Need to call reset() here */
}
componentDidMount() {
let svg = d3.select(this.refs.map).append('svg')
.attr('width', width)
.attr('height', height);
let g = svg.append('g')
.style('stroke-width', '.4px');
function reset() {
/* needs access to g */
g.transition()
.duration(1500)
.style('stroke-width', '.4px')
.attr('transform', '');
}
}
render() {
return (
<div id="map" ref="map"></div>
)
}
}
我々は '' this.g = nullを」のようなコンストラクタで初期値を持つthis.g'を宣言する必要はありませんか? –
@GaleelBhasha、私たちはコードをより自己文書化することができますが、それは必要ではありません。コンポーネントがマウントされた後、 'this.g'にある値を代入します。 'componentWillReceiveProps'関数は' componentWillMount'の前に呼び出すことができませんので、resetを呼び出すと、 'this.g'は未定義になりません。 – 1ven
'this'リファレンスを 'reset'にバインドする必要がありますか?この例では - https://jsbin.com/lozelarure/edit?js,output リセットボタンをクリックすると、次のエラーが表示されます。 'キャッチされていないタイプエラー:未定義のプロパティ' transition 'を読み取れません。 'this'参照を 'reset()=> {}'に変更するか、コンストラクタで 'this.reset = this.reset.bind(this) 'を追加すると、私のために動作します。デモでは、 'render()'メソッドから 'reset'を呼び出しています。私は 'reset 'が' componentWillReceiveProps() 'から呼び出されたとき、これが同じになることを願っています - 私の前提ですか? –