2017-05-01 104 views
0

「刪除」我正在奇怪的錯誤未捕獲的(以諾)類型錯誤:無法讀取屬性未定義

另一個回答說有不當的進口做。我曾嘗試聲明一些方法,如var render_product_url = function()....等等,全部失敗。

AddRendering.js

import React from "react" 


export function add_rendering(headers, target_header, rendering_callback) { 
    var new_headers = []; 
    for (let i = 0; i < headers.length; i++){ 
     var this_header = headers[i]; 
     if (this_header == target_header){ 
      var header_object = { 
       title: target_header, 
       render: rendering_callback 
      }; 
      new_headers.push(header_object); 
     } else { 
      new_headers.push(this_header); 
     } 
    } 
    return new_headers 
} 

function render_product_url(val, row) { 
    return (<a href={"http://www.website.com/product/" + row[target_header]} target="_blank">{row[target_header]}</a>) 
} 

export function render_product_url_in_datatable(headers, target_header) { 
    return add_rendering(
     headers, 
     target_header, 
     render_product_url 
    ) 
} 

ThisController.js

import React from "react" 
import { render_product_url_in_datatable } from '../commonutils/AddRendering'; 


render() { 
    .. 
    these_metrics.headers = render_product_url_in_datatable(these_metrics.headers, 'Part Number'); 
    .. 
} 

最不可思議的部分是這個工程:

import React from "react" 


export function add_rendering(headers, target_header, rendering_callback) { 
    var new_headers = []; 
    for (let i = 0; i < headers.length; i++){ 
     var this_header = headers[i]; 
     if (this_header == target_header){ 
      var header_object = { 
       title: target_header, 
       render: rendering_callback 
      }; 
      new_headers.push(header_object); 
     } else { 
      new_headers.push(this_header); 
     } 
    } 
    return new_headers 
} 

// function render_product_url(val, row) { 
//  return (<a href={"http://www.website.com/p/" + row[target_header]} target="_blank">{row[target_header]}</a>) 
// } 

export function render_product_url_in_datatable(headers, target_header) { 
    return add_rendering(
     headers, 
     target_header, 
     function render_product_url(val, row) { 
      return (<a href={"http://www.website.com/p/" + row[target_header]} target="_blank">{row[target_header]}</a>) 
     } 
    ) 
} 

匿名也適用,就像

return add_rendering(
      headers, 
      target_header, 
      function(val, row) { 
       .. 
      } 

我發現相比普通語言這個JS導入語法笨拙,但這是正常的JS。

爲什麼你能不能用在JavaScript中的文件的其他聲明的函數?這是使用ES6和React。謝謝

+1

奇怪的是,你甚至到達那裏,因爲'target_header'不範圍。 – Ryan

+0

我相信這是傳遞它從'render_product_url_in_datatable(頭,target_header)' – codyc4321

+1

@ codyc4321得到,當它裏面的'render_product_url_in_datatable'它可以從功能參數得到它,但在你的第一個例子中的其他功能('render_product_url' )在作用域上沒有'target_header'。 – MinusFour

回答

1

AddRendering.js要麼你沒有張貼整個代碼(缺少一些進口或東西嗎?),或者你忘了,包括target_header作爲render_product_url函數中的參數(那是什麼val PARAM關係嗎?)。

function render_product_url(val, row) { 
    return (<a href={"http://www.website.com/product/" + row[target_header]} target="_blank">{row[target_header]}</a>) 
} 

如果這是一個導入失蹤,你不知道如何import這是要走的路:

import target_header from './path/to/target_header'; // in case of a default export 
import {target_header} from './path/to/target_header'; // in case of name export 
相關問題