>} />`);
   });
 
+  it('reactElementToJSXString(
)', () => {
+    const renderJSX = jsx =>
+      reactElementToJSXString(jsx, {
+        showFunctions: (_, prop) => prop === 'children',
+        functionValue: fn => `() => ${renderJSX(fn())}`,
+      });
+    expect(renderJSX(
)).toEqual(
+      `
`
+    );
+  });
+
   it('should not cause recursive loop when prop object contains an element', () => {
     const Test = () => 
Test
;
 
diff --git a/src/options.js b/src/options.js
index ccb4a331f..38d6c27fe 100644
--- a/src/options.js
+++ b/src/options.js
@@ -5,8 +5,8 @@ import * as React from 'react';
 export type Options = {|
   filterProps: string[],
   showDefaultProps: boolean,
-  showFunctions: boolean,
-  functionValue: Function,
+  showFunctions: boolean | ((fn: Function, prop: string) => boolean),
+  functionValue: (fn: Function, prop: string) => Function | string,
   tabStop: number,
   useBooleanShorthandSyntax: boolean,
   useFragmentShortSyntax: boolean,
diff --git a/src/parser/parseReactElement.js b/src/parser/parseReactElement.js
index 773b1a98d..1b7c75063 100644
--- a/src/parser/parseReactElement.js
+++ b/src/parser/parseReactElement.js
@@ -5,6 +5,7 @@ import type { Options } from './../options';
 import {
   createStringTreeNode,
   createNumberTreeNode,
+  createFunctionTreeNode,
   createReactElementTreeNode,
   createReactFragmentTreeNode,
 } from './../tree';
@@ -67,9 +68,15 @@ const parseReactElement = (
   }
 
   const defaultProps = filterProps(element.type.defaultProps || {}, noChildren);
-  const childrens = React.Children.toArray(element.props.children)
-    .filter(onlyMeaningfulChildren)
-    .map(child => parseReactElement(child, options));
+
+  let childrens;
+  if (typeof element.props.children === 'function') {
+    childrens = [createFunctionTreeNode(element.props.children)];
+  } else {
+    childrens = React.Children.toArray(element.props.children)
+      .filter(onlyMeaningfulChildren)
+      .map(child => parseReactElement(child, options));
+  }
 
   if (supportFragment && element.type === Fragment) {
     return createReactFragmentTreeNode(key, childrens);
diff --git a/src/parser/parseReactElement.spec.js b/src/parser/parseReactElement.spec.js
index a30188849..a911b2dea 100644
--- a/src/parser/parseReactElement.spec.js
+++ b/src/parser/parseReactElement.spec.js
@@ -182,4 +182,25 @@ describe('parseReactElement', () => {
       ],
     });
   });
+
+  it('should parse children function', () => {
+    const RenderProp = ({ children }) => children({});
+    const fun = () => 
;
+    expect(
+      parseReactElement(
{fun}, options)
+    ).toEqual({
+      type: 'ReactElement',
+      displayName: 'RenderProp',
+      defaultProps: {},
+      props: {
+        key: 'foo',
+      },
+      childrens: [
+        {
+          type: 'function',
+          value: fun,
+        },
+      ],
+    });
+  });
 });
diff --git a/src/tree.js b/src/tree.js
index efbf254af..f7e936fd9 100644
--- a/src/tree.js
+++ b/src/tree.js
@@ -16,6 +16,11 @@ export type NumberTreeNode = {|
   value: number,
 |};
 
+export type FunctionTreeNode = {|
+  type: 'function',
+  value: Function,
+|};
+
 export type ReactElementTreeNode = {|
   type: 'ReactElement',
   displayName: string,
@@ -33,6 +38,7 @@ export type ReactFragmentTreeNode = {|
 export type TreeNode =
   | StringTreeNode
   | NumberTreeNode
+  | FunctionTreeNode
   | ReactElementTreeNode
   | ReactFragmentTreeNode;
 
@@ -46,6 +52,11 @@ export const createNumberTreeNode = (value: number): NumberTreeNode => ({
   value,
 });
 
+export const createFunctionTreeNode = (value: Function): FunctionTreeNode => ({
+  type: 'function',
+  value,
+});
+
 export const createReactElementTreeNode = (
   displayName: string,
   props: PropsType,
diff --git a/src/tree.spec.js b/src/tree.spec.js
index febf01823..c6ba7a2ad 100644
--- a/src/tree.spec.js
+++ b/src/tree.spec.js
@@ -3,6 +3,7 @@
 import {
   createStringTreeNode,
   createNumberTreeNode,
+  createFunctionTreeNode,
   createReactElementTreeNode,
   createReactFragmentTreeNode,
 } from './tree';
@@ -25,6 +26,16 @@ describe('createNumberTreeNode', () => {
   });
 });
 
+describe('createFunctionTreeNode', () => {
+  it('generate a number typed node payload', () => {
+    const fun = () => null;
+    expect(createFunctionTreeNode(fun)).toEqual({
+      type: 'function',
+      value: fun,
+    });
+  });
+});
+
 describe('createReactElementTreeNode', () => {
   it('generate a react element typed node payload', () => {
     expect(